По некоторым причинам мне нужно реализовать определенное меню в QToolBar. Моя цель — сохранить дизайн кнопки по умолчанию с выпадающим меню (значок + треугольник), но я хочу показать свой собственный QDialog (он выглядит как дерево), когда я нажимаю этот треугольник.
Итак, теперь у меня есть что-то вроде этого:
class CustomMenu : public QMenu
{
Q_OBJECT;
public:
CustomMenu(QWidget *parent);
signals:
void showMyMenu();
};
Вот как я создаю это меню и связываю его с необходимыми слотами:
CustomMenu *menu = new CustomMenu(tb);
connect(menu, SIGNAL(aboutToShow()), menu, SIGNAL(showMyMenu()));
connect(menu, SIGNAL(showMyMenu()), this, SLOT(execMyMenu()));
tbButton->setMenu(menu);
tb->addAction(tbButton);
Вот слот:
void MyProjectClass::execMyMenu()
{
CustomMenu *cm = (CustomMenu*)sender();
CustomMenuWidget* myMenu = new CustomMenuWidget();
myMenu->exec();
cm->hide();
delete myMenu;
}
Проблема в том, что вызов hide()
за CustomMenu
не заставляет треугольник становиться не нажатым, и он все еще удерживает фокус на кнопке. Это делает невозможным нажатие чего-либо еще, пока вы не избавитесь от фокуса от этой кнопки.
Все, что я хочу, — это заменить выпадающее меню по умолчанию своим собственным.
Это кажется очень простым, но я, наверное, что-то упустил. Что я делаю неправильно?
я использую Qt 4.8.6
Задача ещё не решена.