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