繁体   English   中英

多个小部件的信号和插槽

[英]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类之一中使用的上述语法。 这个向导有三页,在page(class)的一个中有三个按钮,在这个类的构造函数中,我正在尝试实现。 我也用过“ clicked()”,但是没有运气

首先,没有信号“ Clicked”,但是有“ 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM