我如何左对齐QMenu?

时间:2012-12-10 06:47:21

标签: c++ qt

如何左键对齐按钮点击后创建的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();

    }

2 个答案:

答案 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;
 }