You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt4.8中QMenu内嵌QToolButton自动信号槽关联失效问题及解决

Qt4.8中QWidgetAction内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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 04:35:22