如何使用Qt创建正确的GUI小部件

How to create right GUI widget by using Qt?

本文关键字:GUI 小部 何使用 Qt 创建      更新时间:2023-10-16

我正在使用Qt和Qt Creator编写一个简单的文本编辑器。我想知道如何做出正确的应用程序的结构。我是说小部件。QMainWindow应该是主窗口部件还是可以是QWidget?当我试图指定QMainWindiw作为QTextEdit的父部件时,不显示QTextEdit。因此,我决定将QMainWindow初始化为QWidget的父窗口,QWidget成为所有其他小部件的父窗口。这是一条正确的道路吗?

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

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

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