首页 文章

如何通过信号和插槽传递参数?

提问于
浏览
0

我的GUI由 LineEditPushButton 组成 . 单击 PushButton 时,将调用插槽 clicked() . 我想在 clicked() 作为信号和 doSomething() 作为插槽之间 Build 信号槽关系 . 问题是 doSomething() 无权访问UI, doSomething() 依赖于 LineEdit 的文本 .

我看到两个解决方案:

  • 授予UI doSomething()访问权限 .

  • 我希望能够将QString作为参数传递给doSomething() . clicked()不接受任何参数 . Qsignalmapper可能就是我想要的 . 但是,似乎映射器只根据信号传递参数 . 因此,需要提前设置参数,似乎这对我没有帮助 .

我该如何解决方案2?

1 回答

  • 1

    假设有一个C解决方案,您可以考虑在#2中使用如下的中间信号:

    connect(thisWidget, SIGNAL(clicked()),
            thisWidget, SLOT(slotClickHandler()));
    

    然后:

    void slotClickHandler()
    {
       QString s = "my variable string here";
    
      emit sigDoSomething(s);
    }
    

    还有他们:

    void slotDoSomething(const QString &s)
    {
       // Do something interesting with s here
    
    }
    

    请注意,此代码段假定您已定义新信号 sigDoSomething(const QString &) 和私有插槽 void slotDoSomething(const QString &) .

相关问题