QT常用的控件

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 上会在状态栏中显示的提示信息.
toolTipDuringtoolTip 显示的持续时间.
statusTipWidget 状态发生改变时显示的提示信息(比如按钮被按下等).
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) 开头的路径.
  • 相对路径: 以 . (表示当前路径) 或者 以 … (表示当前路径上级路径) 开头的路径. 其中 . 经常也会省略. 相对路径的前提是需要明确 “当前工作目录”

代码示例: 获取当前的工作目录

  1. 在界面上创建⼀个比较⼤的 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)设置控件的不透明数值

代码示例: 调整窗口透明度

  1. 在界面上拖放两个按钮, 分别用来增加不透明度和减少不透明度.
#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类型的

  1. 执行程序, 可以看到, 点击了几下 - 之后, 就可以透过窗口看到后面的猫猫头了. 点击 + 又会逐渐恢复.

同时控制台中也可以看到 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 中设置字体属性
  1. 在界面上创建⼀个 label
    在这里插入图片描述
  2. 在右侧的属性编辑区, 设置该 label 的 font 相关属性
    在这里插入图片描述
    执行程序即可观察到效果
代码示例: 在代码中设置字体属性
  1. 在界面中创建 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;
}


  1. 运行程序, 观察效果在这里插入图片描述

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)

  1. 在界面上创建 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) 运行程序, 点击 “日间模式”, 就是浅色背景, 深色文字; 点击 “夜间模式”, 就是深色背景, 浅色⽂字

在这里插入图片描述

在这里插入图片描述

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值