Qt4.8中QMenu内嵌QToolButton自动信号槽关联失效问题及解决
在Qt4.8环境下,创建了带弹出QMenu的QToolButton(button1),并通过QWidgetAction将另一个QToolButton(button2)添加到该QMenu中。已为两个按钮设置唯一的ObjectName,但使用QMetaObject::connectSlotsByName进行自动信号槽关联时,仅button1的点击槽函数正常触发,button2点击无响应。
主窗口代码
QToolButton *button1 = new QToolButton(); button1->setObjectName("action1"); button1->setText("Save"); button1->setPopupMode(QToolButton::MenuButtonPopup); QToolButton *button2 = new QToolButton(); button2->setObjectName("action2"); button2->setText("Save11"); QMenu *pMenu = new QMenu("Title"); QWidgetAction *ptoolButtonAction = new QWidgetAction(pMenu); ptoolButtonAction->setDefaultWidget(button2); pMenu->addAction(ptoolButtonAction); button1 ->setMenu(pMenu); QMetaObject::connectSlotsByName(this);
对应的公共槽函数代码
void MyClass::on_action1_clicked() { qDebug() << "action1 is clicked"; } void MyClass::on_action2_clicked() { qDebug() << "action2 is clicked"; }
点击button1("Save")时,终端正常输出action1 is clicked.,但点击button2("Save11")无任何输出。
问题解决方法
将QMenu的构造改为指定父对象为当前窗口,代码修改如下:
QMenu *pMenu = new QMenu("Title", this);
同时需确保所有控件的ObjectName唯一,否则自动关联会失效。
内容的提问来源于stack exchange,提问作者ko4518330
相关产品推荐
相关产品推荐

