多个小部件的信号和插槽
Signal and slot for multiple widgets
我的类中有三个按钮小部件,我想将来自所有三个按钮的点击信号连接到一个插槽。这是我的语法的样子:
QObject::connect(PtrLineedit1, SIGNAL(Clicked()), this, SLOT(myslot()));
QObject::connect(PtrLineedit2, SIGNAL(Clicked()), this, SLOT(myslot()));
QObject::connect(PtrLineedit3, SIGNAL(Clicked()), this, SLOT(myslot()));
但是上面的语法不起作用。上面的语法是我在我的一个 WizardPage 类中使用的。 这个向导有三个页面,其中一个页面(类)有三个按钮,在此类中,我试图实现构造函数。我也用过"clicked()",但没有运气
首先,没有信号"点击",但有"点击" - 小写的。
其次 - 最好不要使用宏 SIGNAL 和 SLOT - 它们容易出错,就像你的情况一样。如果你看一下它们的内部,它们正在生成一个字符串,编译器无法检查该字符串。相反,最好使用以下语法:
QObject::connect(PtrLineedit1, &LineEditClass::clicked, this, &ThisClass::myslot);
因为如果你会写那么:
QObject::connect(PtrLineedit1, &LineEditClass::Clicked, this, &ThisClass::myslot);
如果未定义LineEditClass::Clicked
,它将在编译期间产生错误。这将保护您免受拼写错误的影响。
UPD:由于最终我发现了另一个面临与此相关的问题的问题,我用更多详细信息更新了这个答案,这可能对其他人有所帮助。
在重载方法的情况下,您必须明确告诉编译器应该使用哪一个 - 例如我们有以下内容:
void QComboBox::currentIndexChanged(int index)
void QComboBox::currentIndexChanged(const QString &text)
因此,&QComboBox::currentIndexChanged
可以模棱两可地解决,并且您将获得编译错误。要修复它,您需要明确告知要连接到的函数的参数是什么:
QObject::connect(comboBox, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &ThisClass::myComboBoxSlotWithIntArg);
或
QObject::connect(comboBox, static_cast<void(QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged), this, &ThisClass::myComboBoxSlotWithStringArg);
相关文章:
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- Qt moveToThread,带有参数的信号/插槽
- moc 文件中缺少信号插槽
- 文档在哪里说明如果参数不是从末端删除参数,则无法从QT信号插槽连接中删除参数?
- 信号/插槽多线程 Qt
- 通过排队的QT信号插槽连接发送QSHAREDPOINTERS的QVECTOR
- Qimage没有通过信号插槽QT
- 使用 Qt5 的新信号/插槽实现向滑块发出信号
- 一个类中的QT信号/插槽,但从不同的线程发出
- 信号/插槽基类多继承
- 在QT C 中使用QMOVIE和信号/插槽之间在GIF中导航
- 在 for 循环中使用 lambda 函数连接信号插槽
- 不同类别的 2 个对象之间的信号/插槽
- 如何正确使用qt的信号/插槽系统
- Qt信号插槽视觉工作室:似乎未连接
- QACTION信号插槽中的无形UI
- Qt-连接触发动作中的信号/插槽
- Qt 信号插槽类范围类型
- 信号/插槽 Qt5 C++