Поместите QMenuBar в QMainWindow снизу в QT

Есть ли способ поместить QMenuBar внизу экрана (я имею в виду внизу QMainWindow)?

Я работаю над своим дипломным проектом, и мой директор попросил меня поместить QMenuBar внизу экрана. Возможно ли это? Я пытался настроить геометрию строки меню. В Qt Designer я могу перемещать положение панели, но когда я запускаю свой проект, панель меню всегда находится вверху.

Заранее спасибо.


person Hermandroid    schedule 21.02.2012    source источник


Ответы (2)


Не используйте QMenuBar по умолчанию, поставляемый с QMainWindow. Вместо этого создайте свой собственный. В этом примере, подтверждающем концепцию, создается новый QMenuBar, который добавляется к QVBoxLayout, добавленному в главное окно:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QMenuBar* bar = new QMenuBar(this);
    ui->verticalLayout->addWidget(bar);

    QMenu* menu1 = new QMenu("First menu", bar);
    menu1->addMenu("Foo");
    menu1->addMenu("Bar");

    QMenu* menu2 = new QMenu("Second menu", bar);
    menu2->addMenu("Foo");
    menu2->addMenu("Bar");

    bar->addMenu(menu1);
    bar->addMenu(menu2);
}

Это работает по крайней мере в Windows.

person Community    schedule 21.02.2012
comment
Спасибо за ваш ответ, Року, я попробую позже, я очень ценю вашу помощь. - person Hermandroid; 22.02.2012
comment
Да, в QMainWindows по умолчанию нет вертикального макета, его нужно добавить вручную. - person ; 22.02.2012
comment
Привет, Року, я немного новичок в Qt, значит ли это, что я должен поместить QVerticalLayout в свой QMainWindow, я попробовал это, и мне было интересно, как сохранить вертикальный макет в нижней части экрана при изменении размера окна, но макет всегда в одном и том же месте, есть ли способ настроить макет при изменении размера окна? Заранее спасибо. - person Hermandroid; 22.02.2012
comment
Если вы начинаете с пустого QMainWindow, сделайте следующее: Сначала добавьте нужные вам виджеты в главное окно, например QTextEdits и QListWidgets. Затем выберите главное окно. Затем выберите «Расположить по вертикали» на верхней панели инструментов. Теперь все виджеты в главном окне располагаются вертикально. Когда новый QMenuBar добавляется в конструктор, он добавляется в нижнюю часть макета. Не перетаскивайте макеты с левой панели (поля виджета), так ими довольно сложно пользоваться. Я действительно рекомендую использовать час, чтобы просто поиграть с различными макетами, разделителями и виджетами и изучить, как они работают. - person ; 22.02.2012
comment
Большое спасибо, Року, я очень ценю вашу помощь, я собираюсь проверить макеты таким образом. - person Hermandroid; 22.02.2012

Я поместил меню в QDockWidget, поэтому я предполагаю, что строку меню также можно разместить внизу.

Но вы должны сделать это программно. QMenuBar наследует QWidget, поэтому просто добавьте QWidget внизу QMainWindow, затем создайте QMenuBar, указав этот QWidget в качестве родительского виджета.

person Dmitriy    schedule 21.02.2012