> 作者:დ旧言~
> 座右铭:松树千年终是朽,槿花一日自为荣。> 目标:了解 QT 的窗口,并能使用窗口中的相关工具。
> 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安!
> 专栏选自:QT从基础到入门_დ旧言~的博客-CSDN博客
> 望小伙伴们点赞👍收藏✨加关注哟💕💕
一、概念
Qt 窗⼝ 是通过 QMainWindow类 来实现的:
QMainWindow 是⼀个为⽤⼾提供主窗⼝程序的类,继承⾃ QWidget 类,并且提供了⼀个预定义的布局。QMainWindow 包含 ⼀个菜单栏(menu bar)、多个⼯具栏(tool bars)、多个浮动窗⼝(铆接部件)(dock widgets)、⼀个状态栏(status bar) 和⼀个 中⼼部件(central widget),它是许多应⽤程序的基础,如⽂本编辑器,图⽚编辑器等。如下图为 QMainwindow 中 各组件所处的位置:
二、菜单栏
Qt中的菜单栏是通过QMenuBar类实现的:
一个主窗口最多只有一个菜单栏,位于主窗口顶部、主窗口标题栏下面菜单栏中包含菜单,菜单中包含菜单项。
2.1、创建菜单栏
方法一:菜单栏的创建可以借助于QMainWindow类提供的menuBar()函数来实现。
- 该函数会返回主窗口的菜单栏。若菜单栏不存在,此函数将创建并返回一个空的菜单栏。若菜单栏存在则不会创建,返回已有的菜单栏
- 若创建项目时勾选了创建ui文件,则推荐使用本方法,不推荐在堆上创建菜单栏
- 因为在勾选ui文件后会项目会自动创建菜单栏,又在堆上创建的话,会导致自动创建的菜单栏无法释放,造成内存泄漏
//创建菜单栏
QMenuBar* menubar = menuBar();
//将菜单栏设置进窗口中
this->setMenuBar(menubar);
方法二:在堆上动态创建(使用setMenuBar把菜单栏放到窗口中 )
//创建菜单栏
QMenuBar* menubar = new QMenuBar(this);
//将菜单栏设置进窗口中
this->setMenuBar(menubar);
2.2、在菜单栏中添加菜单
创建菜单,并通过QMenu提供的addMenu()函数来添加菜单:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QMenuBar* menubar = menuBar();
this->setMenuBar(menubar);
//创建菜单
QMenu* menu1 = new QMenu("文件");
QMenu* menu2 = new QMenu("编辑");
QMenu* menu3 = new QMenu("构建");
//将菜单添加到菜单栏中
menubar->addMenu(menu1);
menubar->addMenu(menu2);
menubar->addMenu(menu3);
}
MainWindow::~MainWindow()
{
delete ui;
}
2.3、创建菜单项
在Qt中,并没有专门的菜单项类,可以通过 QAction 类,抽象出公共的动作 QAction 可以给菜单栏使用,也可以给工具栏使用:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QMenuBar* menubar = menuBar();
this->setMenuBar(menubar);
//创建菜单
QMenu* menu1 = new QMenu("文件");
QMenu* menu2 = new QMenu("编辑");
QMenu* menu3 = new QMenu("构建");
//将菜单添加到菜单栏中
menubar->addMenu(menu1);
menubar->addMenu(menu2);
menubar->addMenu(menu3);
//创建菜单项
QAction* action1 = new QAction("open");
QAction* action2 = new QAction("close");
QAction* action3 = new QAction("create");
//将菜单项添加到菜单上
menu1->addAction(action1);
menu1->addAction(action2);
menu1->addAction(action3);
}
MainWindow::~MainWindow()
{
delete ui;
}
2.4、在菜单项之间添加分割线
添加分割线是通过QMenu类提供的addSeparator()函数来实现:
menu1->addAction(action1);
menu1->addSeparator();
menu1->addAction(action2);
menu1->addSeparator();
menu1->addAction(action3);
三、工具栏
工具栏是应用程序中集成各种功能实现快捷键使用的一个区域。可以有多个,也可以没有,并不是应用程序中必须存在的组件。它是一个可移动的组件,它的元素可以是各种窗口组件,它的元素通常以图标按钮的方式存在。
如下图为工具栏的示意图:
3.1、创建工具栏
使用:
调用QMainWindow类的addToolBar()函数来创建工具栏,每增加一个工具栏都需调用一次该函数
如添加两个工具栏:
QToolBar* toolbar1 = new QToolBar(this);
QToolBar* toolbar2 = new QToolBar(this);
this->addToolBar(toolbar1);
this->addToolBar(toolbar2);
3.2、设置停靠位置
概念:
工具栏停靠位置的设置有两种方式。一种是在创建工具栏的同时指定停靠的位置,另一种是通过QToolBar类提供的setAllowedAreas()函数来设置。
方法一:创建工具栏的同时指定其停靠的位置
- Qt::LeftToolBarArea 停靠在左侧
- Qt::RightToolBarArea 停靠在右侧
- Qt::TopToolBarArea 停靠在顶部
- Qt::BottomToolBarArea 停靠在底部
- Qt::AllToolBarAreas 以上四个位置都可停靠
QToolBar* toolbar1 = new QToolBar(this);
QToolBar* toolbar2 = new QToolBar(this);
//创建工具栏时,指定工具栏在左侧显示
this->addToolBar(Qt::LeftToolBarArea, toolbar1);
//创建工具栏时,指定工具栏在右侧显示
this->addToolBar(Qt::RightToolBarArea, toolbar2);
方式二:使用QToolBar类提供的setAllowedAreas()函数设置停靠位置
QToolBar* toolbar1 = new QToolBar(this);
QToolBar* toolbar2 = new QToolBar(this);
this->addToolBar(toolbar1);
this->addToolBar(toolbar2);
//只允许在左侧停靠
toolbar1->setAllowedAreas(Qt::LeftToolBarArea);
//只允许在右侧停靠
toolbar2->setAllowedAreas(Qt::RightToolBarArea);
注意:
- 在创建工具栏时指定其停靠的位置,指的是程序运行时工具栏默认所在的位置
- 而使用setAllowedAreas()函数设置停靠位置,指的是工具栏允许其所能停靠的位置
3.3、设置浮动属性
作用:
工具栏的浮动属性可以通过QToolBar类提供的setFloatable()函数来设置
QToolBar* toolbar1 = new QToolBar(this);
QToolBar* toolbar2 = new QToolBar(this);
this->addToolBar(Qt::LeftToolBarArea, toolbar1);
this->addToolBar(Qt::RightToolBarArea, toolbar2);
toolbar1->setFloatable(true);//允许工具栏浮动
toolbar2->setFloatable(false);//不允许工具栏浮动
3.4、设置移动属性
作用:
设置工具栏的移动属性可以通过QToolBar类提供的setMovable()函数来设置。
QToolBar* toolbar1 = new QToolBar(this);
QToolBar* toolbar2 = new QToolBar(this);
this->addToolBar(Qt::LeftToolBarArea, toolbar1);
this->addToolBar(Qt::RightToolBarArea, toolbar2);
toolbar1->setMovable(true);//允许移动
toolbar2->setMovable(false);//不允许移动
注意:
若设置工具栏为不移动状态,则设置其停靠位置的操作就不会生效,所以设置工具栏的移动属性类似于总开关的效果。
四、状态栏
概念:
状态栏是应用程序中输出简要信息的区域。一般位于主窗口的最底部,一个窗口中最多只能有一个状态栏。在Qt中,状态栏是通过QStatusBar类来实现的
在状态栏中可以显示的消息类型有:
- 实时消息:如当前程序状态
- 永久消息:如程序版本号,机构名称
- 进度消息:如进度条提示,百分比提示
4.1、状态栏的创建
作用:
状态栏的创建是通过QMainWindow类提供的statusBar()函数来创建
QStatusBar* stbar = statusBar();
this->setStatusBar(stbar);
4.2、显示实时消息
作用:
在状态栏中显示实时消息是通过showMessage()函数来实现
//状态栏中显示约2秒的"Hello_Qt"
stbar->showMessage("Hello_Qt", 2000);
4.3、显示永久消息
作用:
在状态栏中可以显示永久消息,此处的永久消息是通过标签来显示的
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QStatusBar* stbar = statusBar();
this->setStatusBar(stbar);
//创建标签
QLabel* label = new QLabel("提示消息", this);
//将标签放入状态栏
stbar->addWidget(label);
}
MainWindow::~MainWindow()
{
delete ui;
}
调整显示消息的位置:
//创建标签
QLabel* label2 = new QLabel("右侧提示消息", this);
//将标签放入状态栏
stbar->addPermanentWidget(label2);
五、浮动窗口
概念:
在Qt中,浮动窗口也被称为铆接部件。浮动窗口是通过QDockWidget类来实现浮动的功能,浮动窗口一般是位于核心部件的周围,可以有多个
5.1、浮动窗口的创建
使用:
浮动窗口的创建是通过QDockWidget类提供的构造方法QDockWidget()函数动态创建的
//浮动窗口
QDockWidget* dockwidget = new QDockWidget("浮动窗口", this);
//将浮动窗口设置与当前窗口中
this->addDockWidget(Qt::BottomDockWidgetArea, dockwidget);
5.2、设置停靠位置
浮动窗口是位于中心部件的周围。可以通过QDockWidget类中提供setAllowedAreas()函数设置其允许停靠的位置
其中可以设置允许停靠的位置有:
- Qt::LeftDockWidgetArea 停靠在左侧
- Qt::RightDockWidgetArea 停靠在右侧
- Qt::TopDockWidgetArea 停靠在顶部
- Qt::BottomDockWidgetArea 停靠在底部
- Qt::AllDockWidgetAreas 以上四个位置都可停靠
//只允许上下停靠
dockwidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
六、结束语
今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。