QT常用控件
一.控件概述
Widget 是 Qt 中的核心概念. 英文原义是 “小部件”, 我们此处也把它翻译为 “控件” .
控件是构成⼀个图形化界面的基本要素.
像上述示例中的, 按钮, 列表视图, 树形视图, 单行输入框, 多行输入框, 滚动条, 下拉框等, 都可以称为 “控件”.
Qt 作为⼀个成熟的 GUI 开发框架, 内置了大量的常用控件. 这⼀点在 Qt Designer 中就可以看到端倪.
并且 Qt 也提供了 “自定义控件” 的能力, 可以让程序猿在现有控件不能满足需求的时候, 对现有控件做出扩展, 或者手搓出新的控件
二.QWidget 核心属性
在 Qt 中, 使用 QWidget 类表示 “控件”. 像按钮, 视图, 输入框, 滚动条等具体的控件类, 都是继承自QWidget.
可以说, QWidget 中就包含了 Qt 整个控件体系中, 通⽤的部分.
在 Qt Designer 中, 随便拖⼀个控件过来, 选中该控件, 即可在右下放看到 QWidget 中的属性
这些属性既可以通过 QtDesigner 会直接修改, 也可以通过代码的方式修改.
这些属性的具体含义, 在 Qt Assistant 中均有详细介绍.
2.1 核心属性概览
下列表格列出了 QWidget 中的属性及其作用.
属性 | 作用 |
---|---|
enabled | 设置控件是否可使用. true 表示了用, false 表示禁用. |
geometry | 位置和尺寸,包含x,y,width,height四个部分,其中坐标是以父元素为参考设置的 |
windowTitle | 设置 widget 标题 |
windowIcon | 设置 widget 图标 |
windowOpacity | 设置 widget 透明度 |
cursor | 鼠标悬停时显示的图标形状.是普通箭头, 还是沙漏, 还是十字等形状.在 Qt Designer 界面中可以清楚看到可选项. |
font | 字体相关属性.涉及到字体家族, 字体大小, 粗体, 斜体, 下划线等等样式 |
toolTip | ⿏标悬停在 widget 上会在状态栏中显示的提示信息. |
toolTipDuring | toolTip 显示的持续时间. |
statusTip | Widget 状态发生改变时显示的提示信息(比如按钮被按下等). |
styleSheet | 允许使用 CSS 来设置 widget 中的样式 |
focusPolicy | 该 widget 如何获取到焦点.Qt::NoFocus:控件不参与焦点管理,即无法通过键盘或鼠标获取焦点 Qt::TabFocus:控件可以通过Tab键获得焦点 Qt::ClickFocus:控件可以通过鼠标点击获得焦点 Qt::StrongFocus:控件可以通过键盘和鼠标获得焦 Qt::WheelFocus:控件可以通过鼠标滚轮获得焦点(在某些平台或样式中可能不可用) |
minimumSize | 控件的最小尺寸. 包含最小宽度和最小高度 |
maximumSize | 控件的最大吃尺寸. 包含最大宽度和最大高度. |
sizePolicy | 尺寸策略. 设置控件在布局管理器中的缩放方式. |
windowModality | 指定窗口是否具有 “模态” 行为. |
sizeIncrement | 拖动窗口大小时的增量单位. |
baseSize | 窗⼝的基础大小, 用来搭配 sizeIncrement 调整组件尺寸是计算组件应该调整到的合适的值 |
palette | 调色板. 可以设置 widget 的颜色风格 |
mouseTracking | 是否要跟踪鼠标移动事件. 如果设为 true, 表示需要跟踪, 则鼠标划过的时候该 widget 就能持续收到鼠标移动事件.如果设为 false, 表示不需要跟踪, 则鼠标划过的时候 widget 不会收到鼠标移动事件, 只能收到鼠标按下或者释放的事件. |
tabletTracking | 是否跟踪触摸屏的移动事件.类似于 mouseTracking . Qt 5.9 中引⼊的新属性. |
layoutDirection | 布局方向:Qt::LeftToRight:文本从左到右排列,也是默认值。Qt::RightToLeft:文本从右到左排列。 |
autoFillBackground | 是否⾃动填充背景颜色. |
windowFilePath | 能够把 widget 和⼀个本地文件路径关联起来. PS: 其实作用不大. |
accessibleName | 设置 widget 的可访问名称. 这个名称可以被辅助技术 (像屏幕阅读器) 获取到 |
inputMethodHints | 针对输⼊框有效, 用来提示用户当前能输入的合法数据的格式. 比如只能输入数字, 只能输入日期等. |
2.2 enabled
API | 说明 |
---|---|
isEnabled() | 获取到控件的可用状态. |
setEnabled | 设置控件是否可使用. true 表示可用, false 表示禁用. |
- 所谓 “禁用” 指的是该控件不能接收任何用户的输入事件, 并且外观上往往是灰色的
- 如果⼀个 widget 被禁用, 则该 widget 的子元素也被禁用.
代码示例:使用代码创建一个禁用状态的按钮
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->pushButton->setEnabled(false);
}
Widget::~Widget()
{
delete ui;
}
运行程序, 可以看到按钮处于灰色状态, 无法被点击.
代码示例: 通过按钮2 切换按钮1 的禁用状态.
生成两个按钮的 slot 函数.
- List item使用 isEnabled 获取当前按钮的可用状态.
- 使用 setEnabled 修改按钮的可用状态. 此处是直接针对原来的可用状态进行取反后设置.
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
qDebug()<<"按下按钮";
}
void Widget::on_pushButton_2_clicked()
{
bool fal = this->ui->pushButton->isEnabled();
this->ui->pushButton->setEnabled(!fal);
}
2.3 geometry
位置和尺寸. 其实是四个属性的统称:
- x横坐标
- y宗坐标
- width宽度
- height 高度
对于 Qt 的坐标系, 不要忘记是⼀个 “左手坐标系”. 其中坐标系的原点是当前元素的父元素的左上角
API | 说明 |
---|---|
geometry() | 获取到控件的位置和尺寸. 返回结果是⼀个 QRect, 包含了 x, y, width, height. 其中 x, y 是左上角的坐标. |
setGeometry(QRect) setGeometry(int x, int y,int width, int height) | 设置控件的位置和尺寸. 可以直接设置⼀个 QRect, 也可以分四个属性单独设置 |
代码示例: 控制按钮的位置
在 widget.cpp 中编写四个按钮的 slot 函数
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
#include<QRect>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_up_clicked()
{
QRect ret =ui->pushButton->geometry();
ui->pushButton->setGeometry(ret.x(),ret.y()-5,ret.width(),ret.height());
}
void Widget::on_pushButton_left_clicked()
{
QRect ret = ui->pushButton->geometry();
ui->pushButton->setGeometry(ret.x()-5,ret.y(),ret.width(),ret.height(