【Qt】Qt窗口
💬 hello!各位铁子们大家好哇。今日更新了Qt窗口的内容Qt 窗口 是通过 QMainWindow类 来实现的。QMainWindow 是一个为用户提供主窗口程序的类,继承自 QWidget 类,并且提供了一个预定义的 布局。
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343
🔥 系列专栏:https://blog.csdn.net/qinjh_/category_13030435.html
目录
前言
💬 hello! 各位铁子们大家好哇。
今日更新了Qt窗口的内容
🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝
Qt 窗口 是通过 QMainWindow类 来实现的。
QMainWindow 是一个为用户提供主窗口程序的类,继承自 QWidget 类,并且提供了一个预定义的 布局。QMainWindow 包含 一个菜单栏(menu bar)、多个工具栏(tool bars)、多个浮动窗口(铆 接部件)(dock widgets)、一个状态栏(status bar) 和一个 中心部件(central widget),它是许多应 用程序的基础,如文本编辑器,图片编辑器等。如下图为 QMainwindow 中 各组件所处的位置:
菜单栏
Qt 中的菜单栏是通过 QMenuBar 这个类来实现的。一个主窗口最多只有一个菜单栏。位于主窗口顶 部、主窗口标题栏下面。
菜单栏中包含菜单. 菜单中包含菜单项.
在 Qt 中,并没有专门的菜单项类,可以通过 QAction 类,抽象出公共的动作。如在菜单中添加菜 单项
QAction 可以给菜单栏使用, 也可以给工具栏使用.
在菜单项之间可以添加分割线。分割线如下图所示,添加分割线是通过 QMenu 类 提供的 addSeparator() 函数来实现;
综合示例
新建 Qt 项目
在 "mainwindow.cpp" 文件中创建菜单和中央控件
执行程序
菜单创建快捷键
运行结果
通过给文本中添加 &F 这样的操作,就是添加了快捷键 alt+F
菜单项创建快捷键
运行结果如下:
添加子菜单
通过addMenu()
运行结果
添加分割线
运行结果
添加图标
需要引入QIcon类和通过qrc机制进行图片的管理
运行结果
QMenuBar创建方式
推荐使用第二种方式创建。(this->menuBar())
如果QMenuBar已经存在,直接获取并返回。
如果QMenuBar不存在,就先创建一个新的再返回。
工具栏
工具栏是应用程序中集成各种功能实现快捷键使用的一个区域。可以有多个,也可以没有,它并不是 应用程序中必须存在的组件。它是一个可移动的组件,它的元素可以是各种窗口组件,它的元素通常 以图标按钮的方式存在。如下图为工具栏的示意图:
创建工具栏
调用 QMainWindow类 的 addToolBar() 函数来创建工具栏,每增加一个工具栏都需要调用一次该函 数。
运行结果
一般工具栏都是展示图标,而不是文本,所以这里用setIcon来实现。
运行结果
QAction如果出现在工具栏上,也会产生图标覆盖文本的情况,但不意味着文本都没用了。
文字会以toolTip的方式存在。鼠标悬停在图标时,就会有文字提示。
也可以手动设置toolTip
创建多个工具栏
运行结果
可以看到有一些点,鼠标放在上面时,就可以进行拖动
设置停靠位置
工具栏停靠位置的设置有两种方式。一种是在创建工具栏的同时指定停靠的位置,另一种是通过 QToolBar类 提供的 setAllowedAreas()函数 来设置。
方式一:创建工具栏的同时指定其停靠的位置。
在创建工具栏的同时,也可以设置工具栏的位置,其默认位置是在窗口的最上面;如上述代码,默认 在最上面显示。工具栏允许停靠的区域由 QToolBar类 提供的 allowAreas()函数 决定,其中可以设置 的位置包括:
- Qt::LeftToolBarArea 停靠在左侧
- Qt::RightToolBarArea 停靠在右侧
- Qt::TopToolBarArea 停靠在顶部
- Qt::BottomToolBarArea 停靠在底部
- Qt::AllToolBarAreas 以上四个位置都可停靠
方式二:使用 QToolBar类 提供的 setAllowedAreas()函数 设置停靠位置。如下示例:
说明: 在创建工具栏的同时指定其停靠的位置,指的是程序运行时工具栏默认所在的位置;而使用 setAllowedAreas()函数设置停靠位置,指的是工具栏允许其所能停靠的位置。
设置浮动属性
工具栏的浮动属性可以通过 QToolBar类 提供的 setFloatable()函数 来设置。setFloatable()函数原 型为:
void setFloatable (bool floatable)
参数:
true:浮动 false:不浮动
设置移动属性
设置工具栏的移动属性可以通过 QToolBar类 提供的 setMovable()函数 来设置。setMovable()函数 原型为:
void setMovable(bool movable)
参数:
true:移动 false:不移动
说明:若设置工具栏为不移动状态,则设置其停靠位置的操作就不会生效,所以设置工具栏 的移动属性类似于总开关的效果
综合示例
运行结果
工具栏2的小黑点不见了,此时不能移动,因为上面代码已经设置不能移动了,
状态栏
状态栏是应用程序中输出简要信息的区域。一般位于主窗口的最底部,一个窗口中最多只能有一个状 态栏。在 Qt 中,状态栏是通过 QStatusBar类 来实现的。 在状态栏中可以显示的消息类型有:
- 实时消息:如当前程序状态
- 永久消息:如程序版本号,机构名称
- 进度消息:如进度条提示,百分百提示
状态栏的创建
状态栏的创建是通过 QMainWindow 类 提供的 statusBar() 函数来创建;示例如下:
在状态栏中显示实时消息是通过 showMessage() 函数来实现
参数2(timeout)是文本存在的时间,单位是ms,如果timeout为0(不填),那么消息将持久存在。
在状态栏中显示永久消息
在状态栏中可以显示永久消息,此处的永久消息是通过 标签 来显示的;示例如下
运行结果
参数2是拉伸系数。
这两个都是添加控件的方法,addWidget是从左往右添加。addPermanentWidget是从右往左添加。
浮动窗口
在 Qt 中,浮动窗口也称之为铆接部件。浮动窗口是通过 QDockWidget类 来实现浮动的功能。浮动窗 口一般是位于核心部件的周围,可以有多个。
设置停靠的位置
浮动窗口是位于中心部件的周围。可以通过 QDockWidget类 中提供 setAllowedAreas() 函数设置其 允许停靠的位置。其中可以设置允许停靠的位置有:
- Qt::LeftDockWidgetArea 停靠在左侧
- Qt::RightDockWidgetArea 停靠在右侧
- Qt::TopDockWidgetArea 停靠在顶部
- Qt::BottomDockWidgetArea 停靠在底部
- Qt::AllDockWidgetAreas 以上四个位置都可停靠
浮动窗口的创建
浮动窗口的创建是通过 QDockWidget类 提供的构造方法 QDockWidget()函数 动态创建的;示例如 下:
运行结果
对话框
对话框介绍
对话框是 GUI 程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框 中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt常 用的内置对话框有:QFiledialog(文件对话框)、QColorDialog(颜色对话框)、QFontDialog (字体对话框)、QInputDialog (输入对话框)和 QMessageBox(消息框) 。
例子:
主窗口中,通过点击按钮,弹出一个新的对话框
运行结果
注意,不同于界面上的其他控件。此处QDialog每次按下按钮,都会创建一个新的QDialog对象,并显示,每次点击都会创建新的对话框对象。
一个程序运行过程中,可以无数次点击这个按钮,进一步就产生出无数个这样的对象了,就会造成内存泄漏。
解决办法:在用户点击对话框关闭按钮的时候,触发delete操作
只要给dialog设置上述属性,此时就会在关闭的时候自动进行delete,Qt内置的功能。
自定义对话框界面
纯代码方式
这里新建一个类
代码
运行结果
图形化界面方式
关键操作:创建出一个新的ui文件出来
后面直接下一步到完成。
此时就多出了一个对话框的ui文件。
代码
运行结果
跟使用纯代码的效果是一样的。
对话框的分类
对话框分为 模态对话框 和 非模态对话框
模态对话框
模态对话框指的是:显示后无法与父窗口进行交互,是一种阻塞式的对话框。使用 QDialog::exec() 函 数 调用。
模态对话框适用于必须依赖用户选择的场合,比如消息显示,文件选择,打印设置等
前面的例子中,都是非模态对话框,如下图:
当我们修改代码,把show换成exec
此时运行
发现无法和父窗口进行交互,此时就是模态对话框了
非模态对话框
非模态对话框显示后独立存在,可以同时与父窗口进行交互,是一种非阻塞式对话框,使用 QDialog::show()函数调用。
非模态对话框一般在堆上创建,这是因为如果创建在栈上时,弹出的非模态对话框就会一闪而过。同 时还需要设置 Qt:WA_DeleteOnClose 属性,目的是:当创建多个非模态对话框时(如打开了多个非 模态窗口),为了避免内存泄漏要设置此属性
非模态对话框适用于特殊功能设置的场合,比如查找操作,属性设置等。
Qt 内置对话框
Qt 提供了多种可复用的对话框类型,即 Qt 标准对话框。Qt 标准对话框全部继承于 QDialog类。常用 标准对话框如下:
消息对话框 QMessageBox
消息对话框是应用程序中最常用的界面元素。消息对话框主要用于为用户提示重要信息,强制用户进 行选择操作。
QMessageBox类 中定义了静态成员函数,可以直接调用创建不同风格的消息对话框,其中包括:
示例
运行结果
点击按钮,就会弹出对话框。
示例:自定义按钮
对于标准按钮可以通过上面的方式获取,对于自定义按钮还是使用信号槽的方式。
运行结果:
点击OK后,就会关闭对话框,然后打印出OK。
示例:如果只是想弹出一个简单MessageBox,下面是更容易的办法
运行结果
颜色对话框 QColorDialog
颜色对话框的功能是允许用户选择颜色。继承自 QDialog 类。颜色对话框如下图示:
常用方法介绍:
- QColorDialog (QWidget *parent = nullptr) //创建对象的同时设置父对象
- QColorDialog(const QColor &initial, QWidget *parent = nullptr) //创建对象的同时通过QColor 对象设置默认颜色和父对象
- void setCurrentColor(const QColor &color) //设置当前颜色对话框
- QColor currentColor() const //获取当前颜色对话框
- QColor getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions()) //打开颜色 选择对话框,并返回一个QColor对象
- void open(QObject *receiver, const char *member) //打开颜色对话框
参数说明:
- initial:设置默认颜色
- parent:设置父对象
- title:设置对话框标题
- options:设置选项
示例:
运行结果:
文件对话框 QFileDialog
文件对话框用于应用程序中需要打开一个外部文件或需要将当前内容存储到指定的外部文件。
常用方法介绍:
1、打开文件(一次只能打开一个文件)
QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
2、打开多个文件(一次可以打开多个文件)
QStringList getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
3、 保存文件
QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
参数说明:
- 参数1:parent 父亲
- 参数2:caption 对话框标题
- 参数3:dir 默认打开的路径
- 参数4:filter 文件过滤器
示例
运行结果
点击打开按钮时,选择一个文件后,就会打印路径。
点击保存按钮时,则是如下界面
这里的打开/保存的功能都是需要额外去实现的,不是直接按保存就真的保存了。
字体对话框 QFontDialog
Qt 中提供了预定义的字体对话框类 QFontDialog,用于提供选择字体的对话框部件。
示例:
getFont():对话框上有ok按钮和cancel按钮,如果点了ok,那么参数的值就被设为true。返回值是QFont对象,里面有字体信息。
运行结果
点击弹出按钮,就会弹出对话框。
选择后点击ok,就会进行相应的修改。控制台也会打印对应的内容
输入对话框 QInputDialog
Qt 中提供了预定义的输入对话框类:QInputDialog,用于进行临时数据输入的场合。
常用方法介绍:
1、双精度浮点型输入数据对话框
2、整型输入数据对话框
3、选择条目型输入数据框
参数说明:
- parent:父亲
- title:对话框标题
- label:对话框标签
- items:可供选择的条目
示例:
QStringList可以当成是一个字符串数组。
运行结果:
上面是整数输入对话框
上面是条目输入对话框,里面的内容也可以直接自己写。
更多推荐




所有评论(0)