Отображение виджетов в Qt

программирование Linux qt

Начал изучать Qt по примерам программ, которые поставляются с Qt. В данный момент разбираюсь с компоновкой(Layout). Задача называется Basic Layouts. Не понял, почему не отображаются виджеты на форме.

Допустим есть код из той задачи

---------main.cpp---------------------------

#include <QApplication>

#include "LayoutTest.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Dialog dialog;
return dialog.exec();
}

-------Dialog.h-------------------------
#ifndef LAYOUTTEST_H
#define LAYOUTTEST_H

#include <QDialog>

class QMenuBar;
class QMenu;
class QAction;

class Dialog: public QDialog
{
Q_OBJECT

public:
Dialog();

private:
void createMenu();

QMenuBar *menuBar;

QMenu *fileMenu;
QAction *exitAction;
};

#endif // LAYOUTTEST_H

---Dialog.cpp------------------------

#include <QtGui>
#include "LayoutTest.h"


Dialog::Dialog()
{
createMenu();
}

void Dialog::createMenu()
{
menuBar = new QMenuBar;

fileMenu = new QMenu(tr("&File"), this);
exitAction = fileMenu->addAction(tr("&Exit"));
menuBar->addMenu(fileMenu);

connect(exitAction, SIGNAL(triggered()), this, SLOT(accept()));
}

1) Почему не отображается написанное в методе createMenu меню?
2) Почему не надо писать в main.cpp dialog.show() что бы отобразилось Главное окно(нет этой строки в данной задаче, а окно появляется все равно)?

Примечание:
так вот вышло случайно, что имя класс и имя файла не совпадают, что вполне корректно, но так делать не нужно =)
а с отображением я разобрался, нужно было добавить

QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->setMenuBar(menuBar);
setLayout(mainLayout);

еще бы теперь научиться отлаживать в gdb...
Ответы:


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.