Aligning QMenuBar items (add some on left and some on right side)

为君一笑 提交于 2019-12-06 02:58:40

问题


Currently I have QMenuBar with three QActions and it looks like this:

but I would like to get this (get some QActions right-aligned):

Is there a way to do this?


回答1:


Well one possible solution is here. But it involves implementing your own style (QStyle as I recall). However here is a snippet that I have just tried on mainwindow class:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)  {  

ui->setupUi(this);

QMenuBar *barLeft = new QMenuBar; 
QMenuBar *barRight = new QMenuBar;

barLeft->addAction("Foo Left 1");
barLeft->addAction("Foo Left 2");
barRight->addAction("Foo Left 1");
barRight->addAction("Foo Left 2");

QHBoxLayout *mainMenuLayout = new QHBoxLayout;

mainMenuLayout->addWidget(barLeft);
mainMenuLayout->addWidget(barRight);

mainMenuLayout->setAlignment(barLeft, Qt::AlignLeft);
mainMenuLayout->setAlignment(barRight, Qt::AlignRight);

QWidget *central = new QWidget;
central->setLayout(mainMenuLayout);

setCentralWidget(central);

}

This should be suitable.




回答2:


Probably the most simple solution to this particular problem is to use the corner widget. It can be used to place almost anything at the rightmost position, of course also a new menu bar:

QMenuBar *bar = new QMenuBar(ui->menuBar);

QMenu *menu = new QMenu("Test menu", bar);
bar->addMenu(menu);

QAction *action = new QAction("Test action", bar);
bar->addAction(action);

ui->menuBar->setCornerWidget(bar);

Result:

This is esp. helpful when the main menu is still to be edited in QDesigner...



来源:https://stackoverflow.com/questions/8726677/aligning-qmenubar-items-add-some-on-left-and-some-on-right-side

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!