Qt 常用控件 - 1
控件概述
编程讲究的是 --- 站在巨人的肩膀上 --- 不是编写一个图形化界面上的内容 --- Qt 已经提供了很多控件了!!!提高图形化界面的开发效率!!!重点变成我们怎么使用这些已有的控件!
Widget 是 Qt 中的核心概念,英文原义是“小部件”,此处翻译为“控件”。控件是构成图形化界面的基本要素,如按钮、列表视图、树形视图、单行输入框、多行输入框、滚动条、下拉框等都属于控件。
Qt 作为成熟的 GUI 开发框架,内置大量常用控件,且可通过 Qt Designer 看到。Qt 还支持自定义控件,以满足特定需求。
分类 | 子控件类型 |
---|---|
Layouts(布局) | Vertical Layout(垂直布局), Horizontal Layout(水平布局), Grid Layout(网格布局), Form Layout(表单布局) |
Spacers(间隔器) | |
Buttons(按钮) | Push Button(按钮), Tool Button(工具按钮), Radio Button(单选按钮), Check Box(复选框), Command Button(命令按钮), Dialog Button(对话框按钮) |
Item Views(项视图) | List View(列表视图), Tree View(树形视图), Table View(表格视图), Column View(列视图), List Widget(列表控件), Tree Widget(树形控件), Table Widget(表格控件) |
Containers(容器) | Group Box(分组框), Scroll Area(滚动区域), Tool Box(工具箱), Tab Widget(标签控件), Stacked Widget(堆叠控件), Frame(框架), Widget(控件), MDI Area(MDI区域), Dock Widget(停靠控件), QaxWidget(Qax控件) |
Input Widgets(输入控件) | Combo Box(组合框), Font Combo Box(字体组合框), Line Edit(行编辑框), Text Edit(文本编辑框), Plain Text Edit(纯文本编辑框), Spin Box(微调框), Double Spin Box(双微调框), Time Edit(时间编辑框), Date Edit(日期编辑框), Date/Time Edit(日期/时间编辑框), Dial(拨号盘) |
Sliders(滑块) | Horizontal Bar(水平条), Vertical Bar(垂直条), Horizontal Slider(水平滑块), Vertical Slider(垂直滑块) |
Key Sequence Edit(键序列编辑) | |
Display Widgets(显示控件) | Label(标签), Text Browser(文本浏览器), Graphics View(图形视图), Calendar Widget(日历控件), LCD Number(LCD数字显示), Progress Bar(进度条), Horizontal Line(水平线), Vertical Line(垂直线) |
这个表格将 Qt 控件按照其功能和用途进行了分类,并列出每个分类下的子控件类型!
Qt 近几年还提供了 Qt Design Studio --- 对标现代化的界面体系 --- 制作出来的页面的美观程度是业界最领先的一档!!!但是目前收费!!!哭了~~~
Qt 中的各种控件都继承自 QWidget 这个类!--- Qt 控件体系中,通用的一部分!
但是:学习 Qt 时,熟悉并掌握内置常用控件是重要任务,这些控件对快速开发符合需求的界面至关重要。
控件体系的发展经历了三个阶段:
-
第一阶段:完全没有控件,需通过绘图 API 手动绘制按钮、输入框等内容,代码繁琐,如文曲星的 Lava 平台开发。
-
第二阶段:只包含粗略的控件,如按钮、输入框、单选框、复选框等最常用控件,例如 html 的原生控件。
-
第三阶段:更完整的控件体系,基本覆盖 GUI 开发中的大部分场景,如早期的 MFC、VB、C++ Builder、Qt、Delphi,后来的 Android SDK、Java FX、前端的各种 UI 库等。前端中的 Element-ui 的控件在丰富程度和颜值上比 Qt 自带的控件更胜一筹。
QWidget 核心属性
在 Qt 中,使用 QWidget 类表示“控件”,具体控件类如按钮、视图、输入框、滚动条等都继承自 QWidget。QWidget 包含了 Qt 整个控件体系中通用的部分。
在 Qt Designer 中,拖动控件后,选中该控件,可在右下方看到 QWidget 中的属性,这些属性既可通过 Qt Designer 直接修改,也可通过代码方式修改,具体含义在 Qt Assistant 中有详细介绍,搜索 QWidget 即可找到文档说明,或在 Qt Creator 代码中选中 QWidget 按 F1 查看。
核心属性概览:
属性名 | 描述 |
---|---|
enabled | 设置控件是否可用,true 表示可用,false 表示禁用。 |
geometry | 位置和尺寸,包含 x、y、width、height 四个部分,坐标以父元素为参考。 |
windowTitle | 设置 widget 标题。 |
windowIcon | 设置 widget 图标。 |
windowOpacity | 设置 widget 透明度。 |
cursor | 鼠标悬停时显示的图标形状,如普通箭头、沙漏、十字等,在 Qt Designer 界面中有可选项。 |
font | 字体相关属性,涉及字体家族、字体大小、粗体、斜体、下划线等样式。 |
toolTip | 鼠标悬停在 widget 上时在状态栏中显示的提示信息。 |
toolTipDuration | toolTip 显示的持续时间。 |
statusTip | Widget 状态发生改变时显示的提示信息(如按钮被按下等)。 |
whatsThis | 鼠标悬停并按下 alt+F1 时显示的帮助信息,显示在一个弹出的窗口中。 |
styleSheet | 允许使用 CSS 来设置 widget 中的样式,Qt 支持的样式丰富,对前端开发人员友好。 |
focusPolicy | 该 widget 如何获取焦点,有以下几种方式: |
contextMenuPolicy | 上下文菜单的显示策略,有以下几种: |
locale | 设置语言和国家地区。 |
acceptDrops | 该部件是否接受拖放操作。如果设置为 true,该部件可以接收来自其他部件的拖放操作,并会接收到相应的拖放事件;如果设置为 false,则不会接收任何拖放操作。 |
minimumSize | 控件的最小尺寸,包含最小宽度和最小高度。 |
maximumSize | 控件的最大尺寸,包含最大宽度和最大高度。 |
sizePolicy | 尺寸策略,设置控件在布局管理器中的缩放方式。 |
windowModality | 指定窗口是否具有“模态”行为。 |
sizeIncrement | 拖动窗口大小时的增量单位。 |
baseSize | 窗口的基础大小,用来搭配 sizeIncrement 调整组件尺寸时计算组件应该调整到的合适值。 |
palette | 调色板,可以设置 widget 的颜色风格。 |
mouseTracking | 是否要跟踪鼠标移动事件。如果设为 true,表示需要跟踪,鼠标划过时该 widget 能持续收到鼠标移动事件;如果设为 false,表示不需要跟踪,鼠标划过时 widget 不会收到鼠标移动事件,只能收到鼠标按下或者释放的事件。 |
tabletTracking | 是否跟踪触摸屏的移动事件,类似于 mouseTracking,是 Qt 5.9 中引入的新属性。 |
layoutDirection | 布局方向,有以下几种: |
autoFillBackground | 是否自动填充背景颜色。 |
windowFilePath | 能够把 widget 和一个本地文件路径关联起来,但作用不大。 |
accessibleName | 设置 widget 的可访问名称,这个名称可以被辅助技术(像屏幕阅读器)获取到,用于实现无障碍程序的场景中,比如给盲人写的程序。其实盲人也可以使用电脑和手机,甚至能成为程序员,可参考链接我采访了几位盲人程序员,看看他们是怎么写代码的【差评君】_哔哩哔哩_bilibili。 |
accessibleDescription | 设置 widget 的详细描述,作用同 accessibleName。 |
inputMethodHints | 针对输入框有效,用来提示用户当前能输入的合法数据的格式,比如只能输入数字、只能输入日期等。 |
接下来会介绍一些比较重要比较常用的属性,并附有代码示例!
enabled:
方法 --- API | 描述 --- 功能 |
---|---|
isEnabled() | 获取到控件的可用状态。 |
setEnabled(bool) | 设置控件是否可用,true 表示可用,false 表示禁用。 |
所谓“禁用”指的是该控件不能接收任何用户的输入事件,并且外观上往往是灰色的。如果一个 widget 被禁用,则该 widget 的子元素也被禁用。
代码示例:使用代码创建一个禁用状态的按钮 --- widget.cpp
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPushButton* btn = new QPushButton(this);btn->setText("这是个被禁用的按钮");btn->setEnabled(false);
}
运行程序,可以看到按钮处于灰色状态,无法被点击。
代码示例:通过按钮2 切换按钮1 的禁用状态.
使用 Qt Designer 拖两个按钮到 Widget 中,两个按钮的 objectName 分别为 pushButton 和 pushButton_2
📚 QObject 的 objectName 属性介绍: QObject 是 QWidget 的父类.。里面最主要的属性就是 objectName 。
在一个 Qt 程序中,objectName 相当于对象的身份标识,彼此之间不能重复.。
在使用 Qt Designer 时, 尤其是界面上存在多个 widget 的时候, 可以通过 objectName 获取到指定的 widget 对象。Qt Designer 生成的 ui 文件, 本身是 xml 格式的。qmake 会把这个 xml 文件转换成 C++ 的 .h 文件(这个文件生成在 build 目录中),构成一个 ui_widget 类。
每个 widget 的 objectName 最终就会成为 ui_widget 类的属性名字。最终这个类的实例,就是 Ui::Widget *ui ,因此就可以通过形如 ui->pushButton 或者 ui->pushButton_2 这样的代码获取到界面上的 widget 对象了。
class Ui_Widget
{
public:QPushButton *pushButton;QPushButton *pushButton_2;
}
生成两个按钮的 slot 函数;
- 使用 isEnabled 获取当前按钮的可用状态;
- 使用 setEnabled 修改按钮的可用状态;
此处是直接针对原来的可用状态进行取反后设置。
void Widget::on_pushButton_clicked()
{qDebug() << "按下按钮";
}
void Widget::on_pushButton_2_clicked()
{bool flag = this->ui->pushButton->isEnabled();this->ui->pushButton->setEnabled(!flag);
}
运行程序,可以看到,初始情况下,上面的按钮是可用状态,点击下方按钮,即可使上方按钮被禁用;
再次点击下方按钮,上方按钮就会解除禁用。 (禁用状态的按钮为 灰色, 且不可点击)
🥛 在 Qt Designer 中创建按钮的时候,可以设置按钮的初始状态是 "可用" 还是 "禁用" 。如果把 enabled 这一列的对钩去掉,则按钮的初始状态就是 "禁用" 状态。
下一篇继续!!!请持续关注😋😋😋😋😋
下一篇继续!!!请持续关注😋😋😋😋😋
下一篇继续!!!请持续关注😋😋😋😋😋