QMainWindow
介绍
QMainWindow
是一个为用户提供主窗口程序的类,是许多应用程序的基础,包含的组件有:
-
菜单栏
QMenuBar
,一个主窗口最多只能有一个菜单栏;包含一个下拉菜单项的列表,这些菜单项由QAction
动作类实现,位于主窗口的顶部。-
QMenuBar *menubar = menuBar(); // 创建一个菜单栏,主窗口最多只能有一个菜单栏 // 创建菜单 File QMenu *fileMenu = menubar->addMenu(tr("&File")); // 创建菜单项 QAction *newAction = fileMenu->addAction(tr("&New")); fileMenu->addSeparator(); // 添加分隔线 // 将菜单栏放入窗口中 setMenuBar(menubar);
-
-
工具栏
QToolBar
,一个主窗口可以有多个工具栏;工具栏一般用于显示一些常用的菜单项目,也可以插入其它窗口部件,可以移动。-
// 创建工具栏 QToolBar *toolbar = new QToolBar(this); // 设置只允许左右停靠 // toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea); // 设置浮动操作 toolbar->setFloatable(false); // 设置移动,如果设置为false表示工具栏不会再移动,是固定的 // toolbar->setMovable(false); //addToolBar(toolbar); // 工具栏放入窗口中 addToolBar(Qt::ToolBarArea::TopToolBarArea,toolbar); // 设置工具栏在窗口的左侧 // 在工具栏中添加动作 toolbar->addAction(newAction); toolbar->addSeparator(); // 工具栏中添加控件 QPushButton *button = new QPushButton(tr("aaa"),this); toolbar->addWidget(button);
-
-
中心部件
Central Widget
,一个主窗口只能有一个中心部件;在主窗口的中心区域可以放入一个窗口部件作为中心部件,是应用程序的主要功能实现区域。-
// 设置中心部件 QTextEdit *textEdit = new QTextEdit(this); setCentralWidget(textEdit); // 设置中心部件到窗口中
-
-
锚接部件
QDockWidget
,一个主窗口可以有多个Dock部件;也被称为停靠窗口,可以停靠在中心部件的四周,用来防止一些部件实现一些功能,类似工具箱。-
QDockWidget *dockWidget = new QDockWidget(tr("Dock部件"),this); // 创建dock控件 addDockWidget(Qt::DockWidgetArea::BottomDockWidgetArea,dockWidget); // dock控件放到窗口中 // 设置停靠区域 dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
-
-
状态栏
QStatusBar
,一个主窗口只能有一个状态栏;用于显示程序的一些状态信息,在主窗口的最底部。-
// 创建状态栏 QStatusBar *statusbar = statusBar(); // 设置到窗口中 setStatusBar(statusbar); // 放置QLabel控件到状态栏 QLabel *label = new QLabel(tr("Ready1"),this); statusbar->addWidget(label); // 放置控件到右侧 QLabel *label2 = new QLabel(tr("Ready2"),this); statusbar->addPermanentWidget(label2); // 状态栏信息放到右侧
-
代码实现创建窗口的各个部件:
void MainWindow::createMenu()
{
QMenuBar *menubar = menuBar(); // 创建一个菜单栏,主窗口最多只能有一个菜单栏
// 创建菜单 File
QMenu *fileMenu = menubar->addMenu(tr("&File"));
// 创建菜单项
QAction *newAction = fileMenu->addAction(tr("&New"));
QAction *openAction =fileMenu->addAction(tr("&Open"));
fileMenu->addSeparator(); // 添加分隔线
QAction *saveAction =fileMenu->addAction(tr("&Save"));
QAction *saveAsAction =fileMenu->addAction(tr("Save &As"));
fileMenu->addSeparator(); // 添加分隔线
QAction *exitAction =fileMenu->addAction(tr("&Exit"));
connect(exitAction,&QAction::triggered,this,&MainWindow::close);
// 创建菜单 Edit
QMenu *editMenu = menubar->addMenu(tr("Edit"));
// 创建菜单 About
QMenu *aboutMenu = menubar->addMenu(tr("About"));
// 将菜单栏放入窗口中
setMenuBar(menubar);
// 创建工具栏
QToolBar *toolbar = new QToolBar(this);
// 设置只允许左右停靠
toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
// 设置浮动操作
toolbar->setFloatable(false);
// 设置移动,如果设置为false表示工具栏不会再移动,是固定的
// toolbar->setMovable(false);
//addToolBar(toolbar); // 工具栏放入窗口中
addToolBar(Qt::ToolBarArea::LeftToolBarArea,toolbar); // 设置工具栏在窗口的左侧
// 在工具栏中添加动作
toolbar->addAction(newAction);
toolbar->addAction(openAction);
// 工具栏中添加控件
QPushButton *button = new QPushButton(tr("aaa"),this);
toolbar->addWidget(button);
}
void MainWindow::createStatusBar()
{
// 创建状态栏
QStatusBar *statusbar = statusBar();
// 设置到窗口中
setStatusBar(statusbar);
// 放置QLabel控件到状态栏
QLabel *label = new QLabel(tr("Ready1"),this);
statusbar->addWidget(label);
// 放置控件到右侧
QLabel *label2 = new QLabel(tr("Ready2"),this);
statusbar->addPermanentWidget(label2); // 状态栏信息放到右侧
}
void MainWindow::createDockWidget()
{
QDockWidget *dockWidget = new QDockWidget(tr("Dock部件"),this); // 创建dock控件
addDockWidget(Qt::DockWidgetArea::BottomDockWidgetArea,dockWidget); // dock控件放到窗口中
// 设置停靠区域
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
}
void MainWindow::createCentralWidget()
{
// 设置中心部件
QTextEdit *textEdit = new QTextEdit(this);
setCentralWidget(textEdit); // 设置中心部件到窗口中
}
将部件设置到窗口中的函数一个容易记的方法,只能有一个的部件是
set
开头的,可以有多个的部件是add
开头的。