Qt-Jambi(Qt4Dotnet):区分插槽中的信号发射器

Qt-Jambi(Qt4Dotnet):区分插槽中的信号发射器,qt,signals-slots,qt-jambi,qt4dotnet,Qt,Signals Slots,Qt Jambi,Qt4dotnet,我是Qt新手,被卡在信号/插槽机制中。我有一个带有许多工具按钮的工具栏,每个按钮都与一些小部件相关联。任务是在单击工具按钮时显示相应的小部件。我想写一个插槽来处理关联,但我不知道如何区分哪个按钮触发了信号。似乎单击了和切换了QToolButton的信号,但不接受任何参数槽,也不存储有关发射器的信息。我可以子类化QtoolButton,并在每个单击的或切换的信号发射上引发一个包含事件发送者信息的CLR事件,但应该有更简单的方法来实现我想要的。您能帮助我吗?在插槽中,您应该能够调用函数sender(

我是Qt新手,被卡在信号/插槽机制中。我有一个带有许多工具按钮的工具栏,每个按钮都与一些小部件相关联。任务是在单击工具按钮时显示相应的小部件。我想写一个插槽来处理关联,但我不知道如何区分哪个按钮触发了信号。似乎单击了切换了QToolButton的信号,但不接受任何参数槽,也不存储有关发射器的信息。我可以子类化QtoolButton,并在每个单击的或切换的信号发射上引发一个包含事件发送者信息的CLR事件,但应该有更简单的方法来实现我想要的。您能帮助我吗?

在插槽中,您应该能够调用函数
sender()
,该函数将返回指向发出信号的对象的指针(如果有…请记住,您也可以像调用函数一样调用插槽)。这是一种快速、相对简单、草率的方法。但是,它破坏了封装

更好的方法是为按钮提供编号机制,并使用
QSignalMapper
将各个按钮映射为一个信号,其中包含所单击按钮的int

这是C++(我比较熟悉):

然后:


在插槽中,您应该能够调用函数
sender()
,该函数将返回一个指向发出信号的对象的指针(如果有,请记住,您也可以像调用函数一样调用插槽)。这是一种快速、相对简单、草率的方法。但是,它破坏了封装

更好的方法是为按钮提供编号机制,并使用
QSignalMapper
将各个按钮映射为一个信号,其中包含所单击按钮的int

这是C++(我比较熟悉):

然后:

QSignalMapper *mapper = new QSignalMapper( this );
connect( mapper, SIGNAL( mapped( int ) ), SLOT( MyFancyFunction( int ) ) );

// Do this for each button:
mapper->connect( button1, SIGNAL( clicked() ), SLOT( map() ) );
mapper->setMapping( button1, FIRST_TOOL )
void MyFancyFunction( int option )
{
    switch ( option )
    {
        case FIRST_TOOL: // do whatever...
    }
}