0
我的GUI由LineEdit和PushButton组成。当点击PushButton时,槽位clicked()
被调用。我想设置一个clicked()
作为信号和doSomething()
作为插槽之间的信号槽关系。问题是doSomething()
无法访问UI,doSomething()
依赖于LineEdit的文本正常工作。如何通过信号和插槽传递参数?
我看到两个解决方案:
格兰特DoSomething的()获取UI。
我想能够通过一个QString doSomething()作为参数。 clicked()不接受任何参数。 Qsignalmapper可能是我正在寻找的。但是,似乎映射器只根据信号是什么传递参数。因此,论据需要事先进行设置,似乎在这里没有帮助。
我该怎么办解决方案2?
太棒了!你会说哪个更清洁?方法1或方法2?这取决于,对吗?方法2的问题在于复制信号/插槽的数量在处理很多GUI元素时会变得混乱,对吗?另外,为什么它是const QString&s?它不应该只是QString? – user2268490 2013-04-11 02:48:49
正如你所说,这是“更清洁”的依赖。清洁剂是什么意思?更容易阅读?更容易调试?编译器更容易?开发人员通常是最薄弱的环节,因此偏见“更清洁”。将信号和插槽清楚地映射到它们各自的小部件(使用有意义的名称等)。让QT moc和gcc担心电话的数量。无论如何,简单的链接函数调用可能会进行优化。最后,看似重复的呼叫将取决于您的实施:有多少个按钮?他们究竟需要传达什么>?等。 – Throwback1986 2013-04-11 03:09:08
至于const QString&,我假设插槽实现不需要修改QString。如果是这样,通过值传递(即QString s)将会生成QString对象的不需要的副本。另一方面,通过引用传递QString(QString&)允许编译器传递更高效的引用(本质上是指向对象的指针)。添加const限定符可以确保编译器知道QString不会被修改。 (事实上,如果你试图修改一个const对象,编译器会声明一个错误)。 – Throwback1986 2013-04-11 03:14:43