我的GUI由 LineEdit 和 PushButton 组成。单击 PushButton 时,将调用插槽clicked()
。我想在clicked()
作为信号和doSomething()
作为插槽之间建立信号槽关系。问题是,doSomething()
无法访问用户界面,而doSomething()
依赖于 LineEdit 的文字。
我看到两个解决方案:
授予doSomething()访问权限。
我希望能够将QString作为参数传递给doSomething()。 clicked()不接受任何参数。 Qsignalmapper可能就是我想要的。但是,似乎映射器只根据信号传递参数。因此,需要提前设置参数,似乎这对我没有帮助。
我如何解决方案2?
答案 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 &)
。