由于某些原因,我需要在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