0

我的 GUI 由LineEditPushButton组成。单击PushButton时,将clicked()调用插槽。我想在信号和槽之间建立信号槽clicked()关系doSomething()。问题是doSomething()它无法访问 UI 并doSomething()依赖LineEdit的文本来工作。

我看到两个解决方案:

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

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

我将如何做解决方案2?

4

1 回答 1

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 &)和一个私有 slot void slotDoSomething(const QString &)

于 2013-04-11T02:11:27.183 回答