Ilya Glushchenko
Ilya Glushchenko

Reputation: 327

How to create right GUI widget by using Qt?

I'm writing a simple text editor by using Qt and Qt Creator. I wonder how to make right application's structure. I mean widgets. Is QMainWindow should be main widget or it can be QWidget? When I trying to specify QMainWindiw as QTextEdit's parent widget, QTextEdit is not displayed. Because of it I decided to initialize QMainWindow as QWidget's parent and QWidget became a parent widget for all another widgets. Is it a right way?

#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QVBoxLayout>
#include <QTextEdit>
#include <QMenuBar>
#include <QMenu>
#include <QSizePolicy>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QMainWindow *mainWindow = new QMainWindow;

    QMenu *fileMenu = new QMenu("File");
    fileMenu->addAction("New");
    fileMenu->addAction("Open");
    fileMenu->addAction("Save");
    fileMenu->addAction("Save as");
    fileMenu->addSeparator();
    fileMenu->setMaximumWidth(160);
    QMenu *editMenu = new QMenu("Edit");
    editMenu->addAction("Copy");
    editMenu->addAction("Past");
    editMenu->addAction("Cut");
    editMenu->setMinimumWidth(160);
    QMenuBar *mainMenu = new QMenuBar;
    mainMenu->addMenu(fileMenu);
    mainMenu->addMenu(editMenu);
    mainMenu->addAction("Exit");
    mainMenu->show();

    QWidget *mainWidget = new QWidget(mainWindow);
    mainWidget->move(0, 20);
    mainWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);

    QTextEdit *textEdit = new QTextEdit;
    textEdit->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);

    QVBoxLayout *vBoxLayout = new QVBoxLayout;
    vBoxLayout->addWidget(textEdit);

    mainWidget->setLayout(vBoxLayout);
    mainWidget->show();

    mainWindow->setMenuBar(mainMenu);
    mainWindow->show();

    return a.exec();
}

Upvotes: 0

Views: 180

Answers (1)

Pavel Strakhov
Pavel Strakhov

Reputation: 40492

You should use QMainWindow if you need to use one of its features: toolbars, dock widgets, main menu or status bar (see QMainWindow docs for more information). If you don't need them, you can use QWidget as your top level widget.

When working with QMainWindow, you need to set central widget using QMainWindow::setCentralWidget and add window contents to this widget, not to the QMainWindow itself.

Upvotes: 2

Related Questions