0

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

    }
4

2 回答 2

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);
于 2014-11-27T15:15:58.177 回答
-1

首先,阅读QMenu 此处的文档。阅读QMenu::exec ()并查看您是否可以满足您的要求。或者,如果你想改变menu-indicator子控件的位置,你可以使用Qt Style Sheets如下。

QPushButton::menu-indicator {
     image: url(menu_indicator.png);
     subcontrol-origin: padding;
     subcontrol-position: left;
 }
于 2012-12-10T08:11:16.063 回答