如何左键对齐按钮点击后创建的QMenu?
我希望从按钮左侧打开菜单
void MyMenu::cppSlot()
{
QMenu *xmenu = new QMenu;
xmenu->addMenu("A -> Setup");
xmenu->addMenu("B -> Setup");
xmenu->addMenu("C -> Setup");
xmenu->addMenu("D -> Setup");
xmenu->addMenu("E -> Setup");
xmenu->addMenu("F -> Setup");
xmenu->addMenu("G -> Setup");
xmenu->setFont(QFont ("Courier", 10));
xmenu->setFixedWidth(250);
xmenu->setAutoFillBackground(true);
QPalette palette=xmenu->palette();
palette.shadow();
xmenu->setPalette(palette);
xmenu->show();
}
答案 0 :(得分:0)
我知道这是一个老话题,但我仍在为将来需要帮助的人提出解决方案。我有一个类似的问题,我想从按钮的bottom-right
角打开菜单。为了实现这一点,我不得不重新编写eventFilter
并相对于全局坐标更改弹出菜单的位置。在你的情况下,我假设你需要它在bottom-left
?这应该是这样的:
bool MainWindow::eventFilter(QObject *obj, QEvent *event){
if (event->type() == QEvent::Show && obj == ui->myButton->menu()){
ui->myButton->menu()->move(ui->myButton->mapToGlobal(QPoint(0,ui->helpButton->height())));
return true;
}
return false;
}
在您的代码中的某个位置,最好在您初始化QMenu
并将其添加到button
之后,您必须添加此行:
ui->myButton->setMenu(helpMenu);
helpMenu->installEventFilter(this);
答案 1 :(得分:-1)
首先,阅读QMenu
here 的文档。阅读QMenu::exec ()
,看看您是否能达到要求。或者,如果您尝试更改menu-indicator
子控件的位置,可以使用Qt Style Sheets
,如下所示。
QPushButton::menu-indicator {
image: url(menu_indicator.png);
subcontrol-origin: padding;
subcontrol-position: left;
}