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

时间:2013-04-11 02:02:02

标签: qt

我的GUI由 LineEdit PushButton 组成。单击 PushButton 时,将调用插槽clicked()。我想在clicked()作为信号和doSomething()作为插槽之间建立信号槽关系。问题是,doSomething()无法访问用户界面,而doSomething()依赖于 LineEdit 的文字。

我看到两个解决方案:

  1. 授予doSomething()访问权限。

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

  3. 我如何解决方案2?

1 个答案:

答案 0 :(得分:2)

假设有一个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 &)