Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > statusBar над menuBar


Автор: BiTOk 15.1.2011, 13:41
Добрый день. Появилась достаточно специфичная проблема - надо расположить QStatusBar над QMenuBar, стандартных возможностей реализовать такое я не нашёл. Как реализовать подобное? Переписывать стандартные компоненты особого желания нету. 
Сразу отсеку вопросы зачем это и т.д. - это задание от препода, препод бескомпромиссный.

Автор: borisbn 15.1.2011, 14:18
Цитата(BiTOk @  15.1.2011,  13:41 Найти цитируемый пост)
препод бескомпромиссный

мало давал smile

по существу:

вертикальный layout. вверху QStatusBar, внизу QWidget. У этого QWidget'а вверху QMenuBar 

Автор: BiTOk 15.1.2011, 14:59
Я вообще никогда преподам денег не предлагал, какой смысл, или настучит в деканат о происшествии, или обманешь сам себя.

Огромное спасибо за метод, действительно удалось уталкать эти элементы друг под другом, но зачем был QWidget меж ними? Получился код:
Код

    ui->verticalLayout->setAlignment(Qt::AlignTop);
    ui->verticalLayout->setSpacing(0);
    QStatusBar *testStatus = new QStatusBar(this);
    testStatus->setSizeGripEnabled(false);
    QWidget *testWidget = new QWidget();
    ui->verticalLayout->addWidget(testStatus);
    ui->verticalLayout->addWidget(testWidget);
    QMenuBar *testMenu = new QMenuBar(testWidget);
    ui->verticalLayout->addWidget(testMenu);
    testMenu->addAction("Test menu");
    testStatus->showMessage("Test status text");

Или я не верно понял мысль с QWidget?

ADD
Как сделать, чтобы в это меню передавался фокус по нажатию Alt?

Автор: borisbn 15.1.2011, 16:35
Цитата(borisbn @  15.1.2011,  14:18 Найти цитируемый пост)
мало давал 

это шутка бил smile


Цитата(BiTOk @  15.1.2011,  14:59 Найти цитируемый пост)
но зачем был QWidget меж ними

я просто не был уверен, что при добавлении меню оно само не вылезет наверх. Если всё получается без QWidget'а - то удали его.

Цитата(BiTOk @  15.1.2011,  14:59 Найти цитируемый пост)
Как сделать, чтобы в это меню передавался фокус по нажатию Alt?

а что, не вызывается ?
а всё-таки, если меню добавлять не в layout, а в widget, Alt его всё равно не вызывает ?


ADD
проверил. при удалении widget'а Alt не вызывает меню, а если сделатьвсё в точности как ты сделал, то всё OK.
Похоже меню вызывается только, если оно лежит первым на widget'е

Автор: BiTOk 15.1.2011, 17:01
Несколько странно, но у меня по альту ничего не происходит (виджет оставил). Как интерпретировать:
Цитата

У этого QWidget'а вверху QMenuBar 

Т.е. при создании QMenuBar в качестве parent указать QWidget?

ADD
Платформа Linux, KDE, Qt 4.7.1.

Автор: borisbn 15.1.2011, 23:44
Цитата(BiTOk @  15.1.2011,  17:01 Найти цитируемый пост)
Как интерпретировать:ЦитатаУ этого QWidget'а вверху QMenuBar Т.е. при создании QMenuBar в качестве parent указать QWidget?

ну да. ты всё сделал так, как я тебе и предлагал. у меня это работает, правда у меня Windows. Хммм, наверное в этом - ОС - и отличие

Автор: BiTOk 16.1.2011, 09:07
Благодарю за помощь.

Автор: BiTOk 18.1.2011, 11:04
Появилась ещё одна проблема. К вышесозданной композиции надо добавить QDockWidget. При этом получается, что боковые доки вытесняют меню и статус бар. В layout не добавить доки, они цепляются к QMainWindow, а меню лежит внутри layout. Как сделать, чтобы и статус бар был над меню, и меню было над доками?

ADD
Моё решение - в главное окно кладём вертикальный лайаут, в него статусбар, менюбар, и ещё одно QMainWindow, туда цепляем доки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)