我是 Qt 的新手,陷入了信号/插槽机制。我有一个带有许多工具按钮的工具栏,每个按钮都与一些小部件相关联。任务是在单击工具按钮时显示适当的小部件。我想编写一个处理关联的插槽,但我不知道如何区分哪个按钮触发了信号。似乎QToolButton的clicked和toggled信号仅接受无参数插槽并且不存储有关其发射器的信息。我可以继承 QtoolButton并引发一个 CLR 事件,其中包含有关每次单击或切换信号发射的事件发送者的信息,但应该有更简单的方法来做我想做的事。你能帮助我吗?
Tony
问问题
1087 次
1 回答
1
在您的插槽中,您应该能够调用函数sender()
,它会返回一个指向发出信号的对象的指针(如果有的话……请记住,您也可以像调用函数一样调用插槽)。这是一种快速、相对容易且草率的方法。但是,它破坏了封装。
更好的方法是为按钮提供一种编号机制,并使用 aQSignalMapper
将各个按钮映射到一个信号中,该信号包含被单击按钮的 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...
}
}
于 2009-07-16T18:38:20.887 回答