【问题标题】:Qt Jambi (Qt4Dotnet): distinguishing signal emitters in a slotQt Jambi (Qt4Dotnet):区分插槽中的信号发射器
【发布时间】:2009-07-16 17:50:07
【问题描述】:

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

【问题讨论】:

    标签: qt signals-slots qt-jambi qt4dotnet


    【解决方案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...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 2012-09-11
      • 2011-04-08
      • 2020-10-01
      • 2017-08-01
      相关资源
      最近更新 更多