QT常用控件
- 一.控件概述
- 二.QWidget 核心属性
- 2.1 核心属性概览
- 2.2 enabled
- 代码示例:使用代码创建一个禁用状态的按钮
- 代码示例: 通过按钮2 切换按钮1 的禁用状态.
- 2.3 geometry
- 代码示例: 控制按钮的位置
- 代码示例: ⼀个随机按钮程序
- 代码示例: 感受 geometry 和frameGeometry 的区别
- (1) 在界面上放置⼀个按钮
- (2)在按钮的 slot 函数中, 编写代码
- (3)在构造函数中, 也添加同样的代码
- 2.4 windowTitle
- 代码示例:设置窗口标题
- 2.5 windowIcon
- 代码示例: 设置窗口图标
- 代码示例: 获取当前的工作目录
- 代码示例: 通过 qrc 管理图片作为图标
- 1) 右键项目, 创建⼀个 Qt Resource File (qrc ⽂件), 文件名随意起(不要带中文), 此处叫做resource.qrc .
- 2) 在 qrc 编辑器中, 添加前缀.
- 3) 在 资源编辑器 中, 点击 add Files 添加资源文件.然后把要加入的文件复制进来就可以
- 2.6 windowOpacity
- 代码示例: 调整窗口透明度
- 2.7 cursor
- 代码示例: 在 Qt Designer 中设置按钮的光标
- 1) 在界面中创建⼀个按钮.
- 2) 直接在右侧属性编辑区修改 cursor 属性为 "等待"
- 3) 运行程序, 鼠标悬停到按钮上, 即可看到光标的变化.
- 代码示例: 通过代码设置按钮的光标
- 代码示例: 自定义鼠标光标
- 1) 创建 qrc 资源文件, 添加前缀 /,并把想要的图片加入即可
- 2) 代码
- 2.8 font
- 代码示例: 在 Qt Designer 中设置字体属性
- 代码示例: 在代码中设置字体属性
- 2.8 toolTip
- 代码示例: 设置按钮的 toolTip
- 2.9styleSheet
- 代码示例: 实现切换夜间模式.
一.控件概述
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());
}
void Widget::on_pushButton_right_clicked()
{
QRect ret = ui->pushButton->geometry();
ui->pushButton->setGeometry(ret.x()+5,ret.y(),ret.width(),ret.height());
}
void Widget::on_pushButton_down_clicked()
{
QRect ret = ui->pushButton->geometry();
ui->pushButton->setGeometry(ret.x(),ret.y()+5,ret.width(),ret.height());
}
上述代码使用 move 方法也是可以的.
#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());
ui->pushButton->move(ret.x(),ret.y()-5);
}
void Widget::on_pushButton_left_clicked()
{
QRect ret = ui->pushButton->geometry();
// ui->pushButton->setGeometry(ret.x()-5,ret.y(),ret.width(),ret.height());
ui->pushButton->move(ret.x()-5,ret.y());
}
void Widget::on_pushButton_right_clicked()
{
QRect ret = ui->pushButton->geometry();
// ui->pushButton->setGeometry(ret.x()+5,ret.y(),ret.width(),ret.height());
ui->pushButton->move(ret.x()+5,ret.y());
}
void Widget::on_pushButton_down_clicked()
{
QRect ret = ui->pushButton->geometry();
//ui->pushButton->setGeometry(ret.x(),ret.y()+5,ret.width(),ret.height());
ui->pushButton->move(ret.x(),ret.y()+5);
}
代码示例: ⼀个随机按钮程序
往界面上拖拽两个按钮和⼀个 Label.
控件中文本如下图所示.
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_yes_clicked()
{
ui->label->setText("同意");
}
void Widget::on_pushButton_no_clicked()
{
int width = this->geometry().width();
int height = this->geometry().height();
int x = rand()%width;
int y = rand()%height;
ui->pushButton_no->move(x,y);
}
window frame 的影响
- 如果 widget 作为⼀个窗⼝ (带有标题栏, 最小化, 最大化, 关闭按钮), 那么在计算尺⼨和坐标的时候就有两种算法. 包含 window frame 和 不包含 window frame.
- 其中 x(), y(), frameGeometry(), pos(), move() 都是按照包含 window frame 的方式来计算的
其中 geometry(), width(), height(), rect(), size() 则是按照不包含 window frame 的方式来计算的.- 当然, 如果⼀个不是作为窗口的 widget , 上述两类方式得到的结果是⼀致的.
相关的API
API | 说明 |
---|---|
x() | 获取横坐标 计算时包含 window frame |
y() | 获取纵坐标 计算时包含 window frame |
pos() | 返回 QPoint 对象, 里面包含 x(), y(), setX(), setY() 等方法.计算时包含 window frame |
frameSize() | 返回 QSize 对象, 里面包含 width(), height(), setWidth(), setHeight() 等方法,计算时包含 window frame |
frameGeometry() | 返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取 x, y,width, size.算时包含 window frame 对象 |
width() | 获取宽度, 计算不包含WIndow frame |
height() | 获取高度 计算不包含WIndow frame |
size() | 返回 QSize 对象, 里面包含 width(), height(), setWidth(), setHeight() 等方法.计算时不包含 window frame |
rect() | 返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取并设置 x,y, width, size. 计算时不包含 window frame 对象. |
geometry() | 返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取 x, y,width, size. 计算时不包含 window frame 对象 |
setGeometry() | 直接设置窗⼝的位置和尺寸. 可以设置 x, y, width, height, 或者 QRect 对象.计算时不包含 window frame 对象. |
代码示例: 感受 geometry 和frameGeometry 的区别
(1) 在界面上放置⼀个按钮
(2)在按钮的 slot 函数中, 编写代码
void Widget::on_pushButton_clicked()
{
QRect ret1 = this->geometry();
qDebug()<<"ret1:"<<ret1;
QRect ret2 = this->frameGeometry();
qDebug()<<"ret2:"<<ret2;
}
(3)在构造函数中, 也添加同样的代码
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QRect ret1 = this->geometry();
qDebug()<<"ret1:"<<ret1;
QRect ret2 = this->frameGeometry();
qDebug()<<"ret2:"<<ret2;
}
执行程序, 可以看到, 构造函数中, 打印出的 geometry 和 frameGeometry 是相同的.
但是在点击按钮时, 打印的 geometry 和 frameGeometry 则存在差异.
这里需要注意
:
- 在构造方法中, Widget 刚刚创建出来, 还没有加⼊到对象树中. 此时也就不具备 Windowframe.
- 在按钮的 slot 函数中, 由于用户点击的时候, 对象树已经构造好了, 此时 Widget 已经具备了Window frame, 因此在位置和尺寸上均出现了差异.
- 如果把上述代码修改成打印 pushButton 的 geometry 和 frameGeometry , 结果就是完全相
同的. 因为 pushButton 并非是⼀个窗⼝.
2.4 windowTitle
API | 说明 |
---|---|
windowTitle() | 获取到控件的窗口标题. |
setWindowTitle(constQString& title) | 设置控件的窗口标题. |
代码示例:设置窗口标题
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->windowTitle();
this->setWindowTitle("标题");
}
Widget::~Widget()
{
delete ui;
}
执行效果:
2.5 windowIcon
API | 说明 |
---|---|
windowIcon() | 获取到控件的窗口图标. 返回 QIcon 对象. |
setWindowIcon(const QIcon& icon) | 设置控件的窗⼝图标 |
代码示例: 设置窗口图标
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
#include <QIcon>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 创建图标对象
QIcon icon("d:/rose.jpg");
// 设置图标
this->setWindowIcon(icon);
}
Widget::~Widget()
{
delete ui;
}
注意
:Windows 下路径的分隔符可以使用 / 也可以使用 \ . 但是如果在 字符串 中使用 \ , 需要写作转义字符的形式 \ . 因此我们还是更推荐使用 / .
于此同时, 程序在任务栏中的图表也发生改变
- 绝对路径: 以盘符(windows)或者以 / (Linux) 开头的路径.
- 相对路径: 以 . (表示当前路径) 或者 以 … (表示当前路径上级路径) 开头的路径. 其中 . 经常也会省略. 相对路径的前提是需要明确 “当前工作目录”
代码示例: 获取当前的工作目录
- 在界面上创建⼀个比较⼤的 label, 确保能把路径显示完整. objectName 使用默认的 label 即可.
#include "widget.h"
#include "ui_widget.h"
#include<QDir>
#include<QString>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QString current = QDir::currentPath();
ui->label->setText(current);
}
Widget::~Widget()
{
delete ui;
}
(2) 直接在 Qt Creator 中执行程序, 可以看到当前工作目录是项目的构建目录.
注意
:
- 上述 构建目录, 是随时可删除的. 比如点击菜单栏中的 “构建” -> “清理项目” , 就会把这个目录中的内容清空掉.
- 因此如果我们把图片文件放到构建目录中, 可能在不小心删除后就丢失了. 我们还是希望能够把图片和源代码放到⼀起, 并且使我们的程序无论拷贝到任何位置中都能正确使用图片.**
Qt 使用 qrc 机制帮我们自动完成了上述工作, 更方便的来管理项目依赖的静态资源.
代码示例: 通过 qrc 管理图片作为图标
1) 右键项目, 创建⼀个 Qt Resource File (qrc ⽂件), 文件名随意起(不要带中文), 此处叫做resource.qrc .
2) 在 qrc 编辑器中, 添加前缀.
此处我们前缀设置成 / 即可.
3) 在 资源编辑器 中, 点击 add Files 添加资源文件.然后把要加入的文件复制进来就可以
添加成功的话
当前路劲就会显示
2.6 windowOpacity
API | 说明 |
---|---|
windowOpacity() | 获取到控件的不透明数值. 返回 float, 取值为 0.0 -> 1.0 其中 0.0 表示全透明, 1.0 表示完全不透明. |
setWindowOpacity(float n) | 设置控件的不透明数值 |
代码示例: 调整窗口透明度
- 在界面上拖放两个按钮, 分别用来增加不透明度和减少不透明度.
#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_add_clicked()
{
float ret = this->windowOpacity();//这里一定要是float
ui->pushButton_add->setShortcut(QKeySequence("w"));
if(ret>=1)
{
return;
}
qDebug()<<ret;
ret+=0.1;
this->setWindowOpacity(ret);
}
void Widget::on_pushButton_sub_clicked()
{
float ret = this->windowOpacity();
ui->pushButton_sub->setShortcut(QKeySequence("s"));
if(ret<0)
{
return;
}
qDebug()<<ret;
ret-=0.1;
this->setWindowOpacity(ret);
}
切记,上述代码中的变量ret一定要是float类型的
- 执行程序, 可以看到, 点击了几下 - 之后, 就可以透过窗口看到后面的猫猫头了. 点击 + 又会逐渐恢复.
同时控制台中也可以看到 opacity 数值的变化
此处代码中的按钮也可以通过绑定键盘上的字母来实现,在接下来的文章中,我会继续说到
2.7 cursor
API | 说明 |
---|---|
cursor() | 获取到当前 widget 的 cursor 属性, 返回 QCursor 对象.当鼠标悬停在该 widget 上时, 就会显示出对应的形状. |
setCursor(const QCursor& cursor) | 设置该 widget 光标的形状. 仅在鼠标停留在该 widget 上时生效. |
QGuiApplication::setOverrideCursor(const QCursor& cursor) | 设置全局光标的形状. 对整个程序中的所有 widget 都会⽣效. 覆盖上面的 setCursor 设置的内容 |
代码示例: 在 Qt Designer 中设置按钮的光标
1) 在界面中创建⼀个按钮.
2) 直接在右侧属性编辑区修改 cursor 属性为 “等待”
3) 运行程序, 鼠标悬停到按钮上, 即可看到光标的变化.
代码示例: 通过代码设置按钮的光标
#include "widget.h"
#include "ui_widget.h"
#include<QPushButton>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QPushButton* button = new QPushButton(this);
button->resize(200,250);
button->move(100,100);
button->setText("这是一个按钮");
button->setCursor(QCursor(Qt::WaitCursor));
}
Widget::~Widget()
{
delete ui;
}
在系统内置的光标下:
Ctrl + 左键 点击 Qt::WaitCursor 跳转到源码即可看到.
这里就不一一列举了,有兴趣的可以尝试
代码示例: 自定义鼠标光标
Qt 自带的光标形状有限. 我们也可以自己找个图片, 做成鼠标的光标
这里给大家推荐一个图标库,阿里巴巴矢量图标库
1) 创建 qrc 资源文件, 添加前缀 /,并把想要的图片加入即可
2) 代码
#include <QPixmap>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 创建⼀个位图对象, 加载⾃定义光标图⽚
QPixmap pixmap(":/huaji.png");
// 缩放图⽚为 64 * 64 的尺⼨.
pixmap = pixmap.scaled(64, 64);
// 创建 QCursor 对象, 并指定 "热点" 为 (2, 2) 坐标位置.
// 所谓 "热点" 就是⿏标点击时⽣效的位置.
QCursor cursor(pixmap, 2, 2);
// 设置光标
this->setCursor(cursor);
}
这里结果图无法截图,可以自己尝试
2.8 font
API | 说明 |
---|---|
font() | 获取当前 widget 的字体信息. 返回 QFont 对象. |
setFont(const QFont& font) | 设置当前 widget 的字体信息 |
关于QFont
属性 | 说明 |
---|---|
family | 字体家族. 比如 “楷体”, “宋体”, “微软雅黑” 等 |
pointSize | 字体大小 |
weight | 字体粗细. 以数值方式表示粗细程度取值范围为 [0, 99], 数值越大, 越粗. |
bold | 是否加粗. 设置为 true, 相当于 weight 为 75. 设置为 false 相当于weight 为 50. |
italic | 是否倾斜 |
underline | 是否带有下划线 |
strikeOut | 是否带有删除线 |
代码示例: 在 Qt Designer 中设置字体属性
- 在界面上创建⼀个 label
- 在右侧的属性编辑区, 设置该 label 的 font 相关属性
执行程序即可观察到效果
代码示例: 在代码中设置字体属性
- 在界面中创建 label, objectName 使用默认的 label 即可
2) 修改 widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 设置 label 的⽂本内容
ui->label->setText("这是⼀段⽂本");
// 创建字体对象
QFont font;
// 设置字体家族
font.setFamily("仿宋");
// 设置字体⼤⼩
font.setPointSize(20);
// 设置字体加粗
font.setBold(true);
// 设置字体倾斜
font.setItalic(true);
// 设置字体下划线
font.setUnderline(true);
// 设置字体删除线
font.setStrikeOut(true);
// 设置字体对象到 label 上
ui->label->setFont(font);
}
Widget::~Widget()
{
delete ui;
}
- 运行程序, 观察效果
2.8 toolTip
API | 说明 |
---|---|
setToolTip | 设置 toolTip.鼠标悬停在该 widget 上时会有提示说明. |
setToolTipDuring | 设置 toolTip 提示的时间. 单位 ms.时间到后 toolTip 自动消失 |
代码示例: 设置按钮的 toolTip
1). 在界面上拖放两个按钮. objectName 设置为 pushButton_yes 和 pushButton_no
2).编写 widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->pushButton_no->setToolTip("no");
ui->pushButton_no->setToolTipDuration(5000);
ui->pushButton_yes->setToolTip("yes");
ui->pushButton_no->setToolTipDuration(5000);
}
Widget::~Widget()
{
delete ui;
}
2.9styleSheet
通过 CSS 设置 widget 的样式.
CSS 中可以设置的样式属性⾮常多. 基于这些属性 Qt 只能支持其中⼀部分, 称为 QSS (Qt Style Sheet)
- 在界面上创建 label
2) 编辑右侧的 styleSheet 属性, 设置样式
鼠标右键标签,然后有个改变样式表即可
在此输入框里输入想要的样式即可
代码示例: 实现切换夜间模式.
(1) 在界面上创建⼀个多行输入框 (Text Edit) 和两个按钮.
2) 编写按钮的 slot 函数
- #333 是深色
- #fff 是纯白色.
- #000 是纯黑色
代码
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_day_clicked()
{
this->setStyleSheet("background-color: #333");
ui->textEdit->setStyleSheet("background-color: #333; color: #fff;");
ui->pushButton_day->setStyleSheet("color: #fff");
ui->pushButton_ye->setStyleSheet("color: #fff");
}
void Widget::on_pushButton_ye_clicked()
{
this->setStyleSheet("background-color: #f3f3f3");
ui->textEdit->setStyleSheet("background-color: #fff; color: #000;");
ui->pushButton_day->setStyleSheet("color: #000");
ui->pushButton_ye->setStyleSheet("color: #000");
}
3) 运行程序, 点击 “日间模式”, 就是浅色背景, 深色文字; 点击 “夜间模式”, 就是深色背景, 浅色⽂字