0

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();
}
4

1 回答 1

2

QMainWindow如果您需要使用它的功能之一,您应该使用它:工具栏、停靠小部件、主菜单或状态栏(有关更多信息,请参阅文档QMainWindow)。如果您不需要它们,则可以QWidget用作顶级小部件。

使用 QMainWindow 时,您需要设置中央小部件QMainWindow::setCentralWidget,并将窗口内容添加到此小部件,而不是 QMainWindow 本身。

于 2013-06-16T15:30:44.223 回答