In Qt4.8, add a QToolButton to a QMenu, the auto connect not work

40 views Asked by At

I have a QToolButton button1 with a popup QMenu menu. I add another QToolButton button2 into the menu. I have already defined the ObjectName. But the auto connect only works for button1, not button2.

For the main window

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);

For the public slots part

void MyClass::on_action1_clicked()
{
    qDebug() << "action1 is clicked";
}


void MyClass::on_action2_clicked()
{
    qDebug() << "action2 is clicked";
}

button and menu look like

In the terminal, when I click button1 "Save", it shows the "action1 is clicked." But when I click button2 "Save1", it shows nothing.

Update: Solve the issue by fixing

QMenu *pMenu = new QMenu("Title", this);

also, the objectName should by unique, or the auto connect will fail for others.

1

There are 1 answers

0
SebDieBln On BEST ANSWER

Your QObject hierarchy is flawed because you do not set an owner for the QToolButtons and the QMenu. connectSlotsByName walks the hierarchy to find objects and signals matching slots.