当前位置: 首页 > news >正文

QT开发——常用控件(2)

windowOpacity

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 opacity = this->windowOpacity();//不透明度只能小于等于1.0if(opacity >= 1.0){return;}qDebug() << opacity;opacity += 0.1;//设置不透明度setWindowOpacity(opacity);
}void Widget::on_pushButton_sub_clicked()
{//获取不透明度float opacity = this->windowOpacity();if(opacity <= 0){return;}qDebug() << opacity;opacity -= 0.1;setWindowOpacity(opacity);
}

注意,C++中float类型遵守IEEE 754 标准

规定浮点数要使用二进制 科学计数法 的方式来表示

把一个浮点数分成3个部分:

1)符号位

2)有效数字

3)指数部分

由于是使用二进制表示的有效数字,而且这里是小于0的效数部分,第一个有效数字是0.5,第二个0.25,第三个0.125......由于float和double有效数字部分长度有限,无法凑出一个非常接近0.1的数字

因此在进行运算的时候会有一定的精度误差。因此,1 - 0.1 的数值并非是0.9

代码中我们加了一个判断条件,不过不加也没事,超过1.0的数字(低于0.0)的数字它也设置不进去,相当于setwindowOpacity里边给我们增加了判断条件

但是还是建议把这个判定范围给加上。<代码大全>这本书中提到的——"防御性编程",引用防御性驾驶去解释:别人犯错了,不会对我们自身造成太大伤害。

cursor属性

cursor()

获取到当前 widget 的 cursor 属性,返回 QCursor 对象

 当鼠标悬停在该 widget 上时,就会显示出对应的形状

setCursor(const QCursor& cursor)

设置该 widget 光标的形状,仅在鼠标停留在该widget上时⽣效

QGuiApplication::setOverrideCursor(const QCursor& cursor)

设置全局光标的形状

对整个程序中的所有widget都会生效,覆盖 上面的 setCursor 设置的内容

注意:这里的全局指的是程序内的全局,而不是系统级别的全局

代码示例:在 Qt Designer 中设置按钮的光标

直接可以在界面上修改cursor的属性

代码设置光标

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QCursor cursor(Qt::WaitCursor);//等待状态的鼠标ui->pushButton_cursor->setCursor(cursor);
}Widget::~Widget()
{delete ui;
}

Ctrl  +   左键点击Qt::WaitCursor 跳转到源码即可看到:系统内置的光标形状

Qt还允许我们通过自定义的方式来设置光标

先准备一张图片,把图片导入到项目中(qrc管理),在代码中访问到这个图片,基于这个图片来构造出光标对象并设置。

切换到编辑界面,访问图片,可以用QPixmap表示一个图片

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//访问到图片文件QPixmap pixmap(":/tupian.png");QCursor cursor(pixmap);ui->pushButton_cursor->setCursor(cursor);
}Widget::~Widget()
{delete ui;
}

在默认情况下 ,鼠标点击时相当于图片的左上角在进行点击,如果要修改可以在构造函数时修改

    QCursor cursor(pixmap,10,10);

10,10是热点所在位置,以图片左上角0,0为原点,找到10,10这个位置作为鼠标真正的点击位置

font

font()

获取当前widget的字体信息,返回 QFont 对象

setFont(const QFont&  font)

设置当前widget的字体信息

关于QFont类

family

字体家族,比如"楷体","宋体","微软雅黑"等

pointSize

字体大小

weight

字体粗细。以数值方式表示粗细程度取值范围为[0,99],数值越大越粗

bold

是否加粗。设置为true,相当于weight为75;设置为false相当于weight为50

italic

是否倾斜

underline

是否有下划线

strikeOut

是否有删除线

在界面上直接编辑font属性

先把一个label拖过去

选中label在其右下角属性栏中有font属性,直接修改即可

如果是程序运行过程中要修改文字属性就得通过代码来完成

#include "widget.h"
#include "ui_widget.h"
#include<QLabel>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel* label = new QLabel(this);label->setText("测试代码使用font的文本");//创建字体对象QFont font;font.setFamily("仿宋");font.setPixelSize(30);font.setBold(true);font.setItalic(true);font.setUnderline(true);font.setStrikeOut(true);//把font对象设置到label中label->setFont(font);
}Widget::~Widget()
{delete ui;
}

toolTip

当一个GUI程序,界面比较复杂的,按钮啥的很多,当你把鼠标悬停到某个控件的时候就能弹出一个提示。

setToolTip

设置toolTip,鼠标悬停在该widget上时会有提示说明(设置提示的内容)

setToolTipDuring

设置toolTip 提示的时间,单位  ms。

时间到后  toolTip 自动消失

代码:设置按钮的toolTip

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->pushButton_yes->setToolTip("这是一个yes按钮");ui->pushButton_yes->setToolTipDuration(3000);ui->pushButton_no->setToolTip("这是一个no按钮");ui->pushButton_no->setToolTipDuration(10000);
}Widget::~Widget()
{delete ui;
}

focusPolicy

设置控件获取到焦点的策略。比如某个控件能否用鼠标选中或者能否通过  tab  键选中

所谓  "焦点" ,指的就是能选中这个元素。

界面上有一个输入框,此时必须选中这个输入框,接下来键盘的输入才会输入到输入框中,如果选中的是别的控件或者别的窗口,此时键盘的输入就不会进入输入框中。

接下来的操作(比如键盘操作),就都是针对该焦点元素进行的了。

这个对于  输⼊框,  单选框,  复选框等控件非常有用的。

"焦点" 用即时战略游戏来解释就是先选中某个单位(兵种、建筑啥的),然后对这个单位进行操作。

一般来说,一个控件获取到焦点有两种方式:

1、鼠标点击                         2、键盘的tab

focusPolicy()

获取该  widget  的  focusPolicy。返回 Qt::FocusPolicy

setFocusPolicy(Qt::FocusPolicy  policy)

设置   widget  的  focusPolicy

Qt::FocusPolicy 是一个枚举类型,取值如下

Qt::NoFocus :控件不会接收键盘焦点

 Qt::TabFocus :控件可以通过Tab键接收焦点

Qt::ClickFocus :控件在鼠标点击时接收焦点

Qt::StrongFocus :控件可以通过Tab键和鼠标点击接收焦点(默认值)

Qt::WheelFocus :类似于Qt::StrongFocus 。同时控件也通过鼠标滚轮获取到焦点(新增的选项,一般很少使用)

理解不同的focusPolicy

在界面上创建四个单行输入框(Line  Edit)

现在每个输入框都可以被鼠标或者TAB选中并输入内容

修改四个框的focusPolicy 属性,第一个为Qt::StrongFocus

第二个为Qt::NoFocus

第三个为Qt::TabFocus

修改第四个为Qt::ClickFocus

第一个现在既可以被鼠标又可以被TAB选中,第二个无法选中,第三个只能用tab选中,第四个只能用鼠标选中。

styleSheet

通过CSS设置widget的样式

所谓"样式",包括不限于大小,位置,颜色,间距,字体,背景,边框等(描述界面具体是啥样子的)

CSS (Cascading  Style  Sheets  层叠样式表)属于属于前端技术。主要就是用来描述界面的 样式

CSS中可以设置的样式属性非常多。基于这些属性Qt只能支持其中⼀部分,称为QSS

代码⽰例:

设置文本样式

界面上创建一个label,然后label右下角属性栏找到styleSheet

右边有三个点,点击此控件会显示以下界面去编辑样式表

当然,也可以直接右键文本框,选中改变样式表

同样也是编辑样式表界面

此处的语法格式同CSS,使用键值对的方式设置样式。其中键和值之间使用 : 分割。键值对之间使用  ;  分割。

代码示例:

通过代码切换样式,实现一个"夜间模式" 功能。

在界面上创建⼀个多行输入框Text Edit或者 Plain Text  Edit 和两个按钮

编写代码(两个槽函数)

#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_light_clicked()
{this->setStyleSheet("background-color:white;");//输入框的样式ui->plainTextEdit->setStyleSheet("background-color:white;color:black;");//按钮样式ui->pushButton_light->setStyleSheet("color:black;");ui->pushButton_dark->setStyleSheet("color:black;");
}void Widget::on_pushButton_dark_clicked()
{//窗口this->setStyleSheet("background-color:black;");//输入框ui->plainTextEdit->setStyleSheet("background-color:black;color:white;");//按钮颜色ui->pushButton_light->setStyleSheet("color:white;");ui->pushButton_dark->setStyleSheet("color:white;");}

千万注意这里的单词拼写:如果拼写出错,不会有任何报错但是样式会不生效。

日间模式和最开始的模式的颜色有些不同

日间模式的背景是纯白的,而最开始是稍微带点灰色的那种颜色

CSS/QSS中是可以直接使用单词来设置颜色的。

关于计算机中的颜色表示

计算机中使用"像素"表示屏幕上的⼀个基本单位(也就是⼀个发亮的光点)。

 每个光点都使⽤三个字节表示颜色,分别是R(red),G(green),B(blue)⼀个字节表示(取值范围是0-255,或者0x00-0xFF)

http://www.dtcms.com/a/617888.html

相关文章:

  • 【Java架构师体系课 | MySQL篇】⑥ 索引优化实战二
  • Spring Boot、Redis、RabbitMQ 在项目中的核心作用详解
  • 做完整的网站设计需要的技术长治建立公司网站的步骤
  • 南宁京象建站公司网站建设留言板实验心得
  • AI、LLM全景图
  • pip升级已安装包方法详解
  • 【Linux日新月异(六)】CentOS 7网络命令深度解析:从传统到现代网络管理
  • LangChain 构建 AI 代理(Agent)
  • 人工智能训练师备考——3.1.1题解
  • 【RL】ORPO: Monolithic Preference Optimization without Reference Model
  • 公益平台网站怎么做网站跳出
  • QT的5种标准对话框
  • 用Rust构建一个OCR命令行工具
  • 网站代码大全国内网站设计作品欣赏
  • LeetCode 热题 100——子串——滑动窗口最大值
  • CPP(容器)STL:
  • 【Java常用API】----- Math
  • RAG 系统 “检索 - 筛选 - 生成” 完整流程
  • 时间复杂度 和 嵌入式时钟概念 有关系。 我的理由是:时钟经常需要计算频率,而频率往往需要和时间进行计数次数i 。 时间复杂度就像是计数次数i
  • 公司做普通网站建立网站地图
  • Java 大视界 -- Java 大数据在智能农业病虫害精准识别与绿色防控中的创新应用
  • 【高并发架构】从 0 到亿,从单机部署到 K8s 编排:高并发架构的 8 级演进之路
  • 基于Streamlit的交互式3D手指运动学仿真
  • 甘肃做网站找谁金种子酒业网站建设
  • 使用 Flink CDC Elasticsearch Pipeline Connector 打通 MySQL 与 Elasticsearch 的实时链路
  • 基于视频识别的大模型项目实战心得
  • Firefly-Modeler 体积雕刻:AI 概念到 3D 基模
  • 提示词工程 - (2) 指南
  • 网络安全 | 深入理解SQL注入的原理和防范
  • python之循环导入