c++ - 如何使用 Qt 创建正确的 GUI 小部件?

标签 c++ qt

我正在使用 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();
}

最佳答案

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

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

关于c++ - 如何使用 Qt 创建正确的 GUI 小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17134812/

相关文章:

multithreading - 使用 QWaitCondition 唤醒线程

c++ - 无法导入/配置 Qt 项目

c++ - 在迭代 Vector 时向其添加元素

c++ - 当我使用自定义分配器溢出 vector 时,为什么没有出现段错误?

c++ - 差异 : Environment Variables & Registry Keys

c++ - 检查指向 vector C++中对象的指针

c++ - 重载非成员运算符==未定义?

c++ - 从文件读取时内存泄漏

qt - Qt5 中的 QX11EmbedContainer 替代方案

Emacs 键绑定(bind)中的 Qt Creator