小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
一、QMainWindow窗口类
QMainWindow也是一个窗口,相比QWidget来说在窗口中多了很多组件,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个铆接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。
1.1 菜单栏
菜单栏里面有很多菜单,菜单里面有很多菜单项
菜单栏类:
在QMainWindow里面设置菜单栏
QMainWindow->void setMenuBar(QMenuBar *menuBar)
菜单栏类:QMenuBar
头文件:
#include <QMenuBar>
构造函数:
QMenuBar(QWidget *parent = nullptr)
菜单:
在菜单栏中添加菜单
QMenuBar ->
QMenu *addMenu(QMenu *menu)
QMenu *addMenu(const QString &title)
菜单类:QMenu
头文件:#include <QMenu>
创建菜单:QMenu(const QString &title, QWidget *parent = nullptr)
菜单项:
添加菜单项
QMenu -->
QAction * addAction(const QString &text)
viod addAction(QAction *action)
菜单项类:QAction
头文件:#include <QAction>
创建菜单项:QAction(const QString &text, QObject *parent = nullptr)
#include "mainwindow.h"
#include <QMenuBar> //菜单栏
#include <QMenu> //菜单
#include <QAction> //菜单项
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//**********设置窗口属性***************
this->setWindowTitle("含有很多组件的窗口");
this->setFixedSize(1200, 800);
//*************菜单栏*****************
//创建菜单栏
QMenuBar *menubar = new QMenuBar(this);
//将菜单栏添加到窗口中
this->setMenuBar(menubar);
//创建菜单添加到菜单栏中
QMenu *menuFile = new QMenu("文件", this);
//将菜单添加到菜单栏中
menubar->addMenu(menuFile);
QMenu *menuEdit = new QMenu("编辑", this);
menubar->addMenu(menuEdit);
QMenu *menuBuild = new QMenu("构建", this);
menubar->addMenu(menuBuild);
//创建菜单项
QAction *actNew = new QAction("新建文件或项目", this);
QAction *actOpen = new QAction("打开文件或项目", this);
QAction *actSave = new QAction("保存文件", this);
QAction *actClose = new QAction("关闭文件", this);
//在菜单中添加菜单项
menuFile->addAction(actNew);
menuFile->addAction(actOpen);
//设置分割线
menuFile->addSeparator();
menuFile->addAction(actSave);
menuFile->addSeparator();
menuFile->addAction(actClose);
//设置菜单项的快捷方式
actNew->setShortcut(QKeySequence(tr("Ctrl+H")));
actSave->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_F));
//给菜单项设置信号并处理
connect(actNew, &QAction::triggered, [=](){
qDebug()<< "新建文件或项目";
});
connect(actSave, &QAction::triggered, [=](){
qDebug()<< "保存文件";
});
}
MainWindow::~MainWindow()
{
}
1.2 工具栏
添加工具栏到窗口:
QMainWindow-->
void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)
area:设置默认停靠的位置
Qt::LeftToolBarArea 左边停靠
Qt::RightToolBarArea 右边停靠
Qt::TopToolBarArea 上边停靠
Qt::BottomToolBarArea 下边停靠
void addToolBar(QToolBar *toolbar)
工具栏类:QToolBar
头文件:#include <QToolBar>
QToolBar(const QString &title, QWidget *parent = nullptr)
//创建工具栏
QToolBar *toolbar = new QToolBar("工具栏", this);
//将工具栏添加到窗口
//this->addToolBar(toolbar); //默认在窗口上方停靠
//设置默认在左边停靠
this->addToolBar(Qt::LeftToolBarArea, toolbar);
//设置工具栏允许停靠的区域
toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
//设置是否允许工具栏浮动
toolbar->setFloatable(false);
//创建菜单项并添加到工具栏
QAction *actWel = new QAction("欢迎", this);
QAction *actEdit = new QAction("编辑", this);
QAction *actDebug = new QAction("Debug", this);
toolbar->addAction(actWel);
toolbar->addSeparator();
toolbar->addAction(actEdit);
toolbar->addSeparator();
toolbar->addAction(actDebug);
1.3 状态栏
QMainWindow-->
添加状态栏
void setStatusBar(QStatusBar *statusbar)
状态栏类:QStatusBar
头文件:#include <QStatusBar>
QStatusBar(QWidget *parent = nullptr)
//创建状态栏
QStatusBar *statusbar = new QStatusBar(this);
//将状态栏添加到窗口上
this->setStatusBar(statusbar);
//在状态栏中设置组件
QLabel *label = new QLabel("欢迎大家来华清远见学习", this);
//在状态栏左边添加
statusbar->addWidget(label);
QLineEdit *lineedit = new QLineEdit("请在此处输入", this);
statusbar->addWidget(lineedit);
QPushButton *button1 = new QPushButton("搜索", this);
statusbar->addWidget(button1);
QPushButton *button2 = new QPushButton("问题", this);
//在状态栏右边添加
statusbar->addPermanentWidget(button2);
QPushButton *button3 = new QPushButton("应用程序输出", this);
statusbar->addPermanentWidget(button3);
1.4 铆接部件
铆接部件一般就是窗口中的浮动窗口
QMainWindow:
添加铆接部件
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)
area:
Qt::LeftDockWidgetArea 左边停靠
Qt::RightDockWidgetArea 右边停靠
Qt::TopDockWidgetArea 上边停靠
Qt::BottomDockWidgetArea 下边停靠
QDockWidget:
头文件:#include <QDockWidget>
QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
//创建铆接部件
QDockWidget *dockwidget = new QDockWidget("这是一个铆接部件", this);
//将铆接部件添加到窗口
this->addDockWidget(Qt::TopDockWidgetArea, dockwidget);
1.5 中心部件
中心部件没有专门的类,任意控件都可以作为中心部件(必须是QWidget以及他的子类才可以)
QMainWindow:
添加中心部件
void setCentralWidget(QWidget *widget)
//将文本编辑器作为中心部件
//创建文本编辑器
QTextEdit *textedit = new QTextEdit("当前文本编辑器作为中心部件", this);
//将其作为中心部件添加到窗口
this->setCentralWidget(textedit);
1.6 所有代码
#include "mainwindow.h"
#include <QMenuBar> //菜单栏
#include <QMenu> //菜单
#include <QAction> //菜单项
#include <QDebug>
#include <QToolBar> //工具栏
#include <QStatusBar> //状态栏
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QDockWidget> //铆接部件
#include <QTextEdit>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//**********设置窗口属性***************
this->setWindowTitle("含有很多组件的窗口");
this->setFixedSize(1200, 800);
//*************菜单栏*****************
//创建菜单栏
QMenuBar *menubar = new QMenuBar(this);
//将菜单栏添加到窗口中
this->setMenuBar(menubar);
//创建菜单添加到菜单栏中
QMenu *menuFile = new QMenu("文件", this);
//将菜单添加到菜单栏中
menubar->addMenu(menuFile);
QMenu *menuEdit = new QMenu("编辑", this);
menubar->addMenu(menuEdit);
QMenu *menuBuild = new QMenu("构建", this);
menubar->addMenu(menuBuild);
//创建菜单项
QAction *actNew = new QAction("新建文件或项目", this);
QAction *actOpen = new QAction("打开文件或项目", this);
QAction *actSave = new QAction("保存文件", this);
QAction *actClose = new QAction("关闭文件", this);
//在菜单中添加菜单项
menuFile->addAction(actNew);
menuFile->addAction(actOpen);
//设置分割线
menuFile->addSeparator();
menuFile->addAction(actSave);
menuFile->addSeparator();
menuFile->addAction(actClose);
//设置菜单项的快捷方式
actNew->setShortcut(QKeySequence(tr("Ctrl+H")));
actSave->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_F));
//给菜单项设置信号并处理
connect(actNew, &QAction::triggered, [=](){
qDebug()<< "新建文件或项目";
});
connect(actSave, &QAction::triggered, [=](){
qDebug()<< "保存文件";
});
//******************工具栏***************************
//创建工具栏
QToolBar *toolbar = new QToolBar("工具栏", this);
//将工具栏添加到窗口
//this->addToolBar(toolbar); //默认在窗口上方停靠
//设置默认在左边停靠
this->addToolBar(Qt::LeftToolBarArea, toolbar);
//设置工具栏允许停靠的区域
toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
//设置是否允许工具栏浮动
toolbar->setFloatable(false);
//创建菜单项并添加到工具栏
QAction *actWel = new QAction("欢迎", this);
QAction *actEdit = new QAction("编辑", this);
QAction *actDebug = new QAction("Debug", this);
toolbar->addAction(actWel);
toolbar->addSeparator();
toolbar->addAction(actEdit);
toolbar->addSeparator();
toolbar->addAction(actDebug);
//******************状态栏***************************
//创建状态栏
QStatusBar *statusbar = new QStatusBar(this);
//将状态栏添加到窗口上
this->setStatusBar(statusbar);
//在状态栏中设置组件
QLabel *label = new QLabel("欢迎大家来华清远见学习", this);
//在状态栏左边添加
statusbar->addWidget(label);
QLineEdit *lineedit = new QLineEdit("请在此处输入", this);
statusbar->addWidget(lineedit);
QPushButton *button1 = new QPushButton("搜索", this);
statusbar->addWidget(button1);
QPushButton *button2 = new QPushButton("问题", this);
//在状态栏右边添加
statusbar->addPermanentWidget(button2);
QPushButton *button3 = new QPushButton("应用程序输出", this);
statusbar->addPermanentWidget(button3);
//******************铆接部件***************************
//创建铆接部件
QDockWidget *dockwidget = new QDockWidget("这是一个铆接部件", this);
//将铆接部件添加到窗口
this->addDockWidget(Qt::TopDockWidgetArea, dockwidget);
//*******************中心部件**********************
//将文本编辑器作为中心部件
//创建文本编辑器
QTextEdit *textedit = new QTextEdit("当前文本编辑器作为中心部件", this);
//将其作为中心部件添加到窗口
this->setCentralWidget(textedit);
}
MainWindow::~MainWindow()
{
}