[QT]控件的核心属性

一、控件的核心属性

1.enable属性

        表示一个控件是否可用,可以用isEnabled()接口获取到当前控件的可用状态,同时来提供了setEnabled()接口设置控件是否可用,传递的参数为true和false。

isEnabled();

setEnabled(bool);

Demo:通过一个按钮来改变另一个按钮的可用状态

        使用QtDesigner,拖拽两个Push Button,两个objectName一个叫testButton,另一个叫changeButton,分别编写点击事件的槽函数。

void Widget::on_testButton_clicked()
{
    qDebug() << "测试按钮被点击了";
}

void Widget::on_changeButton_clicked()
{
    //获取按钮状态
    bool flag = ui->testButton->isEnabled();
    //改变按钮状态
    if(flag)
        ui->testButton->setEnabled(false);
    else
        ui->testButton->setEnabled(true);
}

2.geometry属性 

        内部有四个属性x:横坐标、y:纵坐标、width:宽度、height:高度。对应有三个接口,第一个geometry()接口获取到该控件的位置和尺寸也就是上面的四个属性,会返回一个QRect结构体对象,内部封装着这四个属性。setGeometry()接口可以用来设置这四个属性。

geometry();

setGeometry(QRect);

setGeometry(int x, int y, int width, int height);

setX();  setY();

Demo:用四个按钮实现一个控件的移动 

         使用QtDesigner,拖拽5个Push Button,其中四个作为方向键,一个作为被操作的按钮。

void Widget::on_pushButton_up_clicked()
{
    QRect rect = ui->pushButton_target->geometry();
    ui->pushButton_target->setGeometry(rect.x(), rect.y() - 5, rect.width(), rect.height());
}

void Widget::on_pushButton_left_clicked()
{
    QRect rect = ui->pushButton_target->geometry();
    ui->pushButton_target->setGeometry(rect.x() - 5, rect.y(), rect.width(), rect.height());
}

void Widget::on_pushButton_down_clicked()
{
    QRect rect = ui->pushButton_target->geometry();
    ui->pushButton_target->setGeometry(rect.x(), rect.y() + 5, rect.width(), rect.height());
}

void Widget::on_pushButton_right_clicked()
{
    QRect rect = ui->pushButton_target->geometry();
    ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
}

        控件中对于宽度和高度的如果不显示的设置的话,是用右下角的两个数据,减去左上角的两个数据的出来的,也就是说如果我们获取了一个QRect对象后,只更改x的值,那么无法做到移动,而是右下角的数据减去左上角的数据而使得控件的宽度变大或者变小了,所以说如果想要做到移动的话,就需要修改x,y的同时,设置width和height让其保持不变。

Demo2:请假程序

        分为同意和不同意两个按钮,如果点击不同意的话,那么不同意的按钮会一直变化位置。

//同意槽函数
void Widget::on_pushButton_clicked()
{
    ui->label->setText("谢谢老板同意");
}

//拒绝槽函数
void Widget::on_pushButton_2_clicked()
{
    //获取窗口的宽度和高度
    int width = this->geometry().width();
    int height = this->geometry().height();

    //生成随机位置
    int random_x = rand() % width;
    int random_y = rand() % height;

    QRect rect = ui->pushButton_2->geometry();
    ui->pushButton_2->setGeometry(random_x, random_y, rect.width(), rect.height());
}
Window frame影响

        Window frame是系统窗口框架,是系统自带的东西,会对我们形成的窗口进行包装,那我们geometry内部的x,y属性是相对于哪里的距离呢?位置1还是位置2?

        再Qt中,这两种方案都是存在的,Qt中关于位置尺寸提供了很多中API接口,有的API就以Widget本体左上角为原点,也就是不考虑Window frame,我们上述使用的geometry系列他就是不考虑系统窗口框架的。那么也有的API例如frameGeometry、setFrameGeometry系列就考虑系统窗口框架。

        但是在我们编写好了代码之后,发现为什么两个系列的接口打印出来的值怎么是一样的呢?因为我们实在构造函数里写的,当前项目还在构造阶段,还没有被加入到Window frame中,所以说两个系列的接口打印出来的内容是一样的。我们要把打印放到构造完项目之后的操作中,可以设计为按钮触发打印。

3.WindowTitle属性

        用来设置窗口标题的属性,但是并不是所有的控件都可以设置该属性,该属性只能针对顶层窗口这样的QWidget控件才会有效,设置到非顶层窗口是没有任何效果的,也不会报错。

windowTitle();                                         获取控件的窗口标题

setWindowTitle(const QString& title);    设置控件的窗口标题

4.WindowIcon属性

        表示一个窗口的图标属性,根WindowTitle一样,只能设置在顶层的控件,设置在其他的控件中没有任何效果,也不会报错。

windowIcon();                                       获得控件的窗口图标,返回Icon对象

setWindowIcon(const QIcon& icon);    设置控件的窗口图标

        QIcon也是不支持对象树机制,所以不能给QIcon指定父对象。        

        在创建QIcon对象的时候,直接在栈上创建就可以了,之间我们创建的各种控件以及对象都是在堆上new出来的,主要是因为要确保当前控件或者对象的生命周期是足够的,new出来之后放到对象树中,让对象树去管理释放对象。但是对于QIcon来说,本身是一个比较小的对象,而且创建出来赋值到某个QWidget控件里面后,QIcon本身释不释放,是不影响图标最终的呈现效果的,所以可以在栈上创建,赋值给控件后,直接销毁即可。

        对于QIcon对象的赋值:路径是一个QString字符串,C++中对于反斜杠 ‘ \ ’ 是由特殊意义的,属于转义字符,所以我们书写路径的时候需要双反斜杠来表示一个反斜杠。也可以使用一个正斜杠直接表示路径之间的分隔符。

        C++11中引入了raw string用来解决上述的问题,字符串里面不包含任何的转义字符,也就是该字符串内部的所有字符都不会进行转义了。r(D:\hello\world\haha);

        还有一个最重要的问题在于,我们引入的图片使用的是绝对路径,但是我们做的程序需要放到用户的电脑上,但是用户电脑上的路径肯定跟开发者的不一样,所以很可能找不到资源。相比于使用绝对路径,相对路径的方式会是个很好的解决办法。但是相对路径的情况也可能出问题,用户可能不小心将资源删除了。

qrc机制

        Qt中引入了qrc机制就可以保证上述的两个问题,一个是确保资源的路径在主机上存在,另一个是资源不会被用户轻易的弄丢。实现的原理就是给Qt项目引入了一个额外的以.qrc为后缀的xml文件,这个xml文件可以把要使用的图片资源导入进来,并在xml中进行记录。Qt在编译项目的时候,就会根据qrc中描述的图片信息,提取图片二进制数据转换为C++代码,最终编译到exe可执行程序内部。

        如何使用呢?创建一个Qt中的Qt Resource file文件,创建好之后就自动生成了一个qrc文件。之后先创建一个前缀Prefix,但是这个前缀可以理解为虚拟的目录,可能不是真实存在的,Qt自己为了方便访问到图片资源,自己抽象出来的。之后就可以将图片资源导入到虚拟目录下了,注意图片资源在添加前必须在qrc同级或子目录下才可以添加。

        当代码中需要使用qrc中管理的文件时,就需要在路径上带有冒号 + 前缀 + 文件名即可。之后我们在debug下查看时,就看不到图片资源了,与之对应的是生成了一个qrc_xxxx.cpp文件了,该文件内部是把图片的二进制数据提取了出来,之后都编译在exe文件里面了。

5.WindowOpacity属性

        对于控件透明度的属性。

windowOpacity();                  获取控件的不透明度,0.0表示全透明,1.0表示完全不透明

setWindowOpacity(float n);   设置控件的不透明度

Demo:通过按钮控制控件的透明度
//增加不透明度
void Widget::on_pushButton_up_clicked()
{
    //获取控件的不透明度
    float opacity = this->windowOpacity();
    if(opacity >= 1.0)
        return;
    //设置控件的不透明度
    opacity += 0.1;
    this->setWindowOpacity(opacity);
}

//减少不透明度
void Widget::on_pushButton_down_clicked()
{
    //获取控件的不透明度
    float opacity = this->windowOpacity();
    if(opacity <= 0.0)
        return;
    //设置控件的不透明度
    opacity -= 0.1;
    this->setWindowOpacity(opacity);
}

6.cursor属性

        用于鼠标悬停控件上时的形状的定义属性,可以使用接口,也可以使用Qt Designer中设置。Qt中内置了很多的光标形状,使用了一个enum类型保存在enum CursorShape内部。当然也可以自定义光标的形状。

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

setCursor(const QCursor& cursor);         设置当前widget的cursor属性

QGuiApplication::setOverrideCursor(const QCursor& cursor);      设置全局的光标形状,会  覆盖所有setCursor设置的内容(是程序的全局,不是系统级别的)

        QPixmap类是一个图片类,可以用来保存一个图片文件,它内部有丰富的对图片进行操作的接口,例如scaled功能上来说就是图片的缩放,但是他是生成一个副本,返回的值才是真正我们想要的。同时该类也不支持对象树机制。光标点击默认的生效位置是在图标的最左上角,我们称之为热点,如果想让热点位置偏移,可以在构造QCursor对象时进行设置。下面的案例就是(10,10)的位置才是真正点击的位置了。

7.font属性 

        用于表示控件内部字体信息的属性,例如字体、大小、颜色等等,也可以在Qt Designer中查看和修改是比较方便的。

font();     获取当前Widget的字体信息,返回QFont对象

setFont(const QFont& font);    设置当前Widget的字体信息

        QFont类内部的属性:family字体家族;pointSize字体大小;weight字体粗细范围在0~99,数值越大那么字体越粗;bold是否加粗,如果是true的话相当于字体大小的75,而false相当于字体大小的50; italic是否倾斜;underline是否带有下划线;strikeOut是否带有删除线。他们这些属性对应的设置接口都是在前面加set。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/946920.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DRAM 的类型

DRAM&#xff08;Dynamic Random Access Memory&#xff09;&#xff0c;即动态随机存取存储器&#xff0c;是现代计算机系统中不可或缺的存储组件之一。 根据市场情况主要分为以下几种&#xff1a; 一、SDRAM&#xff08;Synchronous Dynamic Random Access Memory&#xff0…

虚拟机中的时统卡功能和性能调优

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

创新驱动智能运维,护航军工新时代

随着数字化转型的加速推进&#xff0c;智能运维技术在各行业的重要性愈加凸显。军工行业作为国家安全和技术创新的核心&#xff0c;对运维解决方案的安全性、可靠性及自主可控性提出了严格要求。美信时代科技有限公司以自主创新为基础&#xff0c;推出监控易一体化智能运维管理…

《计算机网络》(B)复习

目录 一、问答题测试 1.论述具有五层协议的网络体系结构的要点&#xff0c;包括各层的主要功能。 2.物理层的接口有哪几个方面的特性&#xff1f;各包含些什么内容&#xff1f; 3.小明想要访问淘宝&#xff0c;当他打开浏览器输入www.taobao.com浏览淘宝的 过程是什么&#…

如何配置【Docker镜像】加速器+【Docker镜像】的使用

一、配置Docker镜像加速器 1. 安装/升级容器引擎客户端​ 推荐安装1.11.2以上版本的容器引擎客户端 2. 配置镜像加速器​ 针对容器引擎客户端版本大于1.11.2的用户 以root用户登录容器引擎所在的虚拟机 修改 "/etc/docker/daemon.json" 文件&#xff08;如果没有…

logback之自定义过滤器

logback有两种过滤器&#xff0c;一种是context中的过滤器叫TurboFilter&#xff0c;是一个全局的过滤器&#xff0c;会影响所有的日志记录。另一种是Appender中的过滤器&#xff0c;只对所在的append有效。两者大同小异&#xff0c;这里我们以Appender的过滤器为例。 &#x…

springboot+vue实现SSE服务器发送事件

思路 一个基于订阅发布机制的SSE事件。客户端可以请求订阅api&#xff08;携带客户端id&#xff09;&#xff0c;与服务器建立SSE链接&#xff1b;后续服务器需要推送消息到客户端时&#xff0c;再根据客户端id从已建立链接的会话中找到目标客户端&#xff0c;将消息推送出去。…

使用XGBoost算法进行机器学习任务:从理论到实践

目录 使用XGBoost算法进行机器学习任务&#xff1a;从理论到实践引言1. XGBoost算法简介2. XGBoost的数学原理3. 环境准备与数据集介绍3.1 环境准备3.2 数据集介绍 4. XGBoost的PyTorch实现4.1 数据预处理4.2 XGBoost模型定义4.3 模型训练与评估 5. 结果分析与可视化5.1 绘制损…

NeurIPS 2024 | 像素级LLM实现图像视频理解、生成、分割和编辑大统一(昆仑万维等)

Accepted by NeurIPS 2024 文章链接&#xff1a;https://arxiv.org/pdf/2412.19806 项目链接&#xff1a;https://vitron-llm.github.io/ Github链接&#xff1a;https://github.com/SkyworkAI/Vitron 亮点直击 首次提出了一种通用的视觉多模态大语言模型&#xff08;MLLM&…

P8打卡——YOLOv5-C3模块实现天气识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 1.检查GPU import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import transforms, dat…

OpenCV-Python实战(16)——单/多模板匹配

一、模板匹配函数 cv2.matchTemplate() result cv2.matchTemplate(image*,templ*,method*,mask*) result&#xff1a;函数返回值&#xff0c;比较结果的数组。 image&#xff1a;原始图像。 templ&#xff1a;模板图像。templ.shape<image.shape。 method&#xff1a;…

分布式 L2 网关下的 OVS 未知单播泛洪

大家读完觉得有意义和帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 目录 1 问题描述 2 基础设施和环境信息 3 故障排除 3.1 确认&#xff1a;单播泛洪 3.2 确认&#xff1a;所有泛洪流量都以 L2 GW 为目标 3.3 验证&#xff1a;容器 ARP 处于活动状态时&…

天猫推荐数据集实践

参考自 https://github.com/xufengtt/recom_teach_code&#xff0c;学习记录。 环境配置&#xff08;maxcomputedataworks&#xff09; 下载天猫推荐数据集&#xff1b;开启 aliyun 的 maxcompute&#xff0c;dataworks&#xff0c;pai&#xff1b;使用 odpscmd 上传本地数据…

库的概念:动态库与静态库

在软件开发中&#xff0c;库是代码复用的核心工具&#xff0c;它帮助开发者避免重复造轮子&#xff0c;提升开发效率。库可以分为动态库和静态库&#xff0c;这两者在程序开发中的使用方式、链接过程和性能上存在显著区别。本文将详细讲解动态库与静态库的定义、区别、链接过程…

Flink源码解析之:如何根据JobGraph生成ExecutionGraph

Flink源码解析之&#xff1a;如何根据JobGraph生成ExecutionGraph 在上一篇Flink源码解析中&#xff0c;我们介绍了Flink如何根据StreamGraph生成JobGraph的流程&#xff0c;并着重分析了其算子链的合并过程和JobGraph的构造流程。 对于StreamGraph和JobGraph的生成来说&…

风力涡轮机缺陷检测数据集,91.4%准确识别率,18912张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注

风力涡轮机缺陷检测数据集&#xff0c;91.4&#xff05;准确识别率&#xff0c;18912张图片&#xff0c;支持yolo&#xff0c;PASICAL VOC XML&#xff0c;COCO JSON格式的标注 数据集下载&#xff1a; &#xff59;&#xff4f;&#xff4c;&#xff4f; &#xff56;&#…

系统设计——大文件传输方案设计

摘要 大文件传输是指通过网络将体积较大的文件从一个位置发送到另一个位置的过程。这些文件可能包括高清视频、大型数据库、复杂的软件安装包等&#xff0c;它们的大小通常超过几百兆字节&#xff08;MB&#xff09;甚至达到几个吉字节&#xff08;GB&#xff09;或更大。大文…

linux中执行命令

1.1 命令格式 命令格式&#xff1a; 主命令 选项 参数&#xff08;操作对象&#xff09; 命令分为两类&#xff1a; 内置命令&#xff08; builtin &#xff09;&#xff1a;由 shell 程序自带的命令 外部命令&#xff1a;有独立的可执行程序文件&#xff0c;文件名即命令…

Elasticsearch:当混合搜索真正发挥作用时

作者&#xff1a;来自 Elastic Gustavo Llermaly 展示混合搜索何时优于单独的词汇或语义搜索。 在本文中&#xff0c;我们将通过示例探讨混合搜索&#xff0c;并展示它与单独使用词汇或语义搜索技术相比的真正优势。 什么是混合搜索&#xff1f; 混合搜索是一种结合了不同搜索…

Python pyside6 设置的一个《广告图片生成器》

一、图&#xff1a; 二、说明书&#xff1a; 广告图片生成器使用说明 软件功能 这是一个用于生成广告图片的工具&#xff0c;可以快速制作包含产品图片和文字的广告图片。 主要特点 自定义广告尺寸&#xff08;默认620420像素&#xff09; 智能去除产品图片背景 自动排版&…