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

时间:2009-07-16 17:50:08

标签: qt signals-slots qt-jambi qt4dotnet

我是Qt的新手并陷入了信号/插槽机制。我有一个带有许多工具按钮的工具栏,每个按钮都与一些小部件相关联。任务是在单击工具按钮时显示适当的小部件。我想写一个会处理关联的插槽,但我无法弄清楚如何区分触发信号的按钮。似乎点击切换 QToolButton 的信号只接受无参数广告位并且不存储有关其发射器的信息。我可以继承 QtoolButton ,并在每次点击切换信号发射时提供有关事件发送方的信息的CLR事件,但应该有更简单的方法做我想做的事。你能救我吗?

1 个答案:

答案 0 :(得分:1)

在你的插槽中,你应该能够调用函数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...
    }
}