我正在使用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();
}
答案 0 :(得分:2)
如果您需要使用其中一项功能,则应使用QMainWindow
:工具栏,停靠小部件,主菜单或状态栏(有关详细信息,请参阅QMainWindow
文档)。如果您不需要它们,可以使用QWidget
作为顶级窗口小部件。
使用QMainWindow时,您需要使用QMainWindow::setCentralWidget
设置中央窗口小部件,并将窗口内容添加到此窗口小部件,而不是添加到QMainWindow本身。