【QT】Widget

目录

widget常用属性及其作用

enabled

geomtry

window frame

window frame的影响

相关API 

windowTitle 

windowIcon

qrc机制 

qrc使用方式

自定义鼠标图片 

设置字体样式

设置鼠标悬停提示

toolTip

控件获取焦点

styleSheet  


widget常用属性及其作用

属性作用
enabled设置控件是否可使用
geometry位置和尺寸,包含x,y,width,height四个部分
windowTitle设置widget标题
windowIcon设置widget图标
windowOpacity设置widget透明度
cursor鼠标悬停时显示的图标形状,是普通箭头,还是沙漏,还是十字等
font
字体相关属性.
涉及到字体家族, 字体⼤⼩, 粗体, 斜体, 下划线等等样式
toolTip
⿏标悬停在 widget 上会在状态栏中显⽰的提⽰信息
toolTipDuring
toolTip 显⽰的持续时间.
statusTip
Widget 状态发⽣改变时显⽰的提⽰信息(⽐如按钮被按下等)
whatsThis
⿏标悬停并按下 alt+F1 时, 显⽰的帮助信息(显⽰在⼀个弹出的窗⼝中).
styleSheet
允许使⽤ CSS 来设置 widget 中的样式.
Qt 中⽀持的样式⾮常丰富, 对于前端开发⼈员上⼿是⾮常友好的.
focusPolicy
该 widget 如何获取到焦点.
Qt::NoFocus:控件不参与焦点管理,即⽆法通过键盘或⿏标获取焦点
Qt::TabFocus:控件可以通过Tab键获得焦点
Qt::ClickFocus:控件可以通过⿏标点击获得焦点
Qt::StrongFocus:控件可以通过键盘和⿏标获得焦点
Qt::WheelFocus:控件可以通过⿏标滚轮获得焦点(在某些平台或样式中可能不可
⽤)
layoutDirection
布局⽅向.
Qt::LeftToRight:⽂本从左到右排列,也是默认值。
Qt::RightToLeft:⽂本从右到左排列。
Qt::GlobalAtomics:部件的布局⽅向由全局原⼦性决定(PS 这个翻译其实有点尴尬. 其实就是根据应⽤程序中的其他 widget 布局⽅向确定的)
inputMethodHints
针对输⼊框有效, ⽤来提⽰⽤⼾当前能输⼊的合法数据的格式. ⽐如只能输⼊数字, 只能
输⼊⽇期等.

enabled

API说明
isEnabled()获取到控件的可用状态
setEnabled设置控件是否可使用

示例: 

button->setEnabled(false);  //设置禁用

*所谓“禁用”指的是该控件不能接收任何用户的输入事件,并且外观往往也是灰色的。

*如果一个widget被禁用,则该widget的子元素也被禁用。 

geomtry

位置和尺寸,其实是四个属性的统称:

  • x 横坐标
  • y 纵坐标
  • width 宽度
  • heigh t宽度

API说明
geometry()获取到控件的位置和尺寸,返回结果是一个QRect,包含x,y,width,height,其中 x,y是左上角的坐标

setGeometry(QRect)

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

设置控件的位置和尺寸,可以直接设置一个QRect,也可以分四个属性单独设置

//获取当前位置信息

QRect rect = ui->pushButton_target->geometry();

//改变控件位置信息

ui->pushButton_target-> setGeometry (rect. x () - 5 , rect. y (), rect. width (),
rect. height ());

window frame

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 对象

windowTitle 

API说明
windowTitle()
获取到控件的窗⼝标题.
setWindowTitle(const
QString& title)
设置控件的窗⼝标题.

代码示例:

this -> setWindowTitle ( " 这是标题 " );

windowIcon

API说明
windowIcon()
获取到控件的窗⼝图标. 返回 QIcon 对象.
setWindowIcon(const
QIcon& icon )
设置控件的窗⼝图标.

注意:同 windowTitle, 上述操作仅针对顶层 widget 有效.

代码示例:

// 创建图标对象
QIcon icon ( "d:/rose.jpg" );
// 设置图标
this -> setWindowIcon (icon);  

设置图标的时候,可能会存在路径图片的问题,因此,Qt中有一个qrc机制

qrc机制 

这个机制从根本上解决下述两个问题:

  1. 确保你的图片所在的路径在目标用户机器上存在
  2. 确保你的图片不会被用户搞没了

在Qt项目引入一个额外的xml文件(后缀名使用 .qrc表示)在这个xml中把要使用的图片资源给导入进来,并且在xml中进行记录。

Qt在编译项目的时候,就会根据qrc中描述的图片信息,找到图片内容,并且提取出图片的二进制数据,把这些二进制数据转成C++代码,最终编译到exe里。

但是qrc机制也存在缺点:无法导入太大的资源文件,比如搞几个GB的这种视频文件,qrc就无能为力了

qrc使用方式

第一步:在项目中创建一个qrc文件,文件名不要带中文和特殊符号

第二步:把图片导入到qrc文件中

(1)先创建一个“前缀”(prefix)

所谓的“前缀”可以理解成虚拟的目录,这个目录没有在你的电脑上真实存在,是Qt自己抽象出来的 ,qrc机制本质上就是把图片的二进制数据,转成C++代码(最终就会在代码中看到很大的char数组,里面就是图片的二进制数据)

为了方便Qt代码中访问到这个图片,Qt就自己抽象出了虚拟的目录

(2)把需要的图片导入到资源文件中

 

上示的按钮在创建prefix之前是禁用的,创建好prefix之后就可以使用了,添加的文件就是添加到prefix下面的。 点击这个按钮后,所得到的目录就是当前代码所在的目录。

导入图片的时候,需要确保你导入的图片必须在resourse.qrc文件的同级目录

如上即可完成添加。

当代码中需要访问qrc中管理的文件时,就需要在路径上带有:前缀,格式如下:

QIcon icon(" :/wallhaven-7p3993.jpg")

自定义鼠标图片 

  //访问到图片文件QPixmap pixmap(":/123.jpg");//构造光标对象QCursor cursor(pixmap,10,10);//把光标设置进去this->setCursor(cursor);

但是图片可能会因为太大或者太小,所以我们可以通过缩放或者放大图片以便实现效果

 //访问到图片文件QPixmap pixmap(":/123.jpg");pixmap = pixmap.scaled(100,100);

缩放操作不是对图像本身进行修改,而是 返回一个新的图像副本,所以我们需要将它在存起来

iconfont-阿里巴巴矢量图标库

设置字体样式

    QLabel* label= new QLabel(this);label->setText("这是一段文本");//创建字体对象QFont font;font.setFamily("仿宋");font.setPixelSize(30);font.setBold(true);font.setItalic(true);font.setUnderline(true);font.setStrikeOut(true);//把font对象设置到lebel中label->setFont(font);

设置鼠标悬停提示

一个GUI程序,界面比较复杂,按钮很多的时候,我们希望鼠标悬停在某个控件的时候,能弹出一个提示

toolTip

API说明
setToolTip

设置toolTip

鼠标悬停在该widget上时会有提示说明

setToolTipDuring

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

时间到后toolTip自动消失

代码示例:

ui->pushButton_yes-> setToolTip ( " 这个是 yes 按钮 " );
ui->pushButton_yes-> setToolTipDuration ( 3000 );

控件获取焦点

设置控件获取到焦点的策略. ⽐如某个控件能否⽤⿏标选中或者能否通过 tab 键选中.
所谓 "焦点" , 指的就是能选中这个元素. 接下来的操作 (⽐如键盘操作), 就都是针对该焦点元素进⾏的了. 这个对于 输⼊框, 单选框, 复选框等控件⾮常有⽤的.
API说明
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 , 同时控件也通过⿏标滚轮获取到焦点 (新增
的选项, ⼀般很少使⽤).

styleSheet  

通过 CSS 设置 widget 的样式
CSS 中可以设置的样式属性⾮常多 . 基于这些属性 Qt 只能⽀持其中⼀部分, 称为 QSS (Qt Style Sheet) . 具体的⽀持情况可以参考 Qt ⽂档中 "Qt Style Sheets Reference" 章节.

代码示例:

this -> setStyleSheet ( "background-color: #333" );
ui->textEdit-> setStyleSheet ( "background-color: #333; color: #fff;" );
ui->pushButton_light-> setStyleSheet ( "color: #fff" );
ui->pushButton_dark-> setStyleSheet ( "color: #fff" );

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你打造高精度STM32数字时钟,超详细步骤解析

STM32数字时钟项目详解 1. 项目概述 STM32数字时钟是一个集成了时间显示、闹钟功能、温湿度检测等多功能于一体的小型电子设备。它利用STM32的实时时钟(RTC)功能作为核心,配合LCD显示屏、按键输入、温湿度传感器等外设,实现了一个功能丰富的数字时钟系统。 2. 硬件组成 STM…

IND83081芯片介绍(二)

七、典型应用 上面显示了独立的CAN收发器,而下面则显示了多个iND83081可以共享同一个CAN收发器的应用场景。通过这些连接,iND83081可以实现对多个LED的驱动和控制,同时与外部MCU进行通信 。 八、ELINS接口 1.ELINS简介 ELINS是一种从接口&a…

Oracle 19C19.3 rac安装并RU升级到19.14

19C支持RU补丁安装。 下载好19.14的RU补丁 [rootrac1 soft]# ll total 9830404 -rw-r--r-- 1 grid oinstall 3059705302 Jun 18 15:26 LINUX.X64_193000_db_home.zip -rw-r--r-- 1 grid oinstall 2889184573 Jun 18 15:27 LINUX.X64_193000_grid_home.zip -rw-r--r-- 1 grid …

Antivirus Zap Pro :苹果 mac 电脑全面的系统安全解决方案

Antivirus Zap Pro 是一个全面的系统安全解决方案,它可以扫描和删除 Mac 中的恶意软件和其他恶意软件,还可以检测 Mac 上已经存在的威胁或可疑文件,并保护您的 Mac 免遭日后的威胁,满足用户不同的 Mac 电脑杀毒需求,有…

Firewalld防火墙基础

Firewalld 支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具 支持IPv4、IPv6防火墙设置以及以太网桥 支持服务或应用程序直接添加防火墙规则接口 拥有两种配置模式 运行时配置:临时生效,一旦重启或者重载即不生效 永久配置&#xff1a…

2024年【焊工(初级)】实操考试视频及焊工(初级)考试试题

题库来源:安全生产模拟考试一点通公众号小程序 焊工(初级)实操考试视频根据新焊工(初级)考试大纲要求,安全生产模拟考试一点通将焊工(初级)模拟考试试题进行汇编,组成一…

【人工智能学习之图像操作(二)】

【人工智能学习之图像操作(二)】 图像上的运算图像混合按位运算 图像的几何变换仿射变换透视变换膨胀操作腐蚀操作开操作闭操作梯度操作礼帽操作黑帽操作 图像上的运算 图像上的算术运算,加法,减法,图像混合等。 加减…

【FPGA项目】System Generator算法板级验证-快速搭建外围测试电路

🎉欢迎来到FPGA专栏~System Generator算法板级验证-快速搭建外围测试电路 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文…

【微服务网关——中间件实现】

1.中间件的意义 避免成为if狂魔提高复用、隔离业务调用清晰、组合随意 2.实现原理 中间件一般都封装在路由上,路由是URL请求分发的管理器中间件选型 基于链表构建中间件 基于责任链的实现缺点:实现复杂,调用方式不灵活 使用数组构建中间件 控…

大模型笔记1: Longformer环境配置

论文: https://arxiv.org/abs/2004.05150 首先保证电脑上配置了git. git环境配置: https://blog.csdn.net/Andone_hsx/article/details/87937329 3.1、找到git安装路径中bin的位置,如:D:\Program Files\Git\bin 找到git安装路径中git-core的…

PostgreSQL 连接器:在 SeaTunnel 中的应用与优势

在现代企业中,数据已经成为核心资产,基于开源数据集成平台SeaTunnel,工程师如何高效地连接和管理这些数据源,直接关系到企业的竞争力和运营效率。 本文将给大家介绍如何通过 JDBC PostgreSQL 数据源连接器,在 SeaTunne…

第15周:RNN心脏病预测

目录 前言 二、前期准备 2.1 设置GPU 2.2 导入数据 2.2.1 数据介绍 2.2.2 导入代码 2.2.3 检查数据 三、数据预处理 3.1 划分训练集与测试集 3.2 标准化 四、构建RNN模型 4.1 基本概念 4.2 搭建代码 五、编译模型 六、训练模型 七、模型评估 总结 前言 &#…

直播怎么录制视频?直播视频,3种录制方法

“今晚我最喜欢的游戏博主要进行直播,但我可能还要加班。怎么办,不想错过直播的内容!电脑怎么才能进行直播录制视频啊?谁能教教我?” 在数字化的今天,直播已经成为人们获取信息和娱乐的重要途径。有时&…

执行yum命令报错Could not resolve host: mirrors.cloud.aliyuncs.com; Unknown error

执行yum命令报错 [Errno 14] curl#6 - "Could not resolve host: mirrors.cloud.aliyuncs.com; Unknown error 修改图中所示两个文件: vim epel.repo vim CentOS-Base.repo 将所有的http://mirrors.cloud.aliyuncs.com 修改为http://mirrors.aliyun.com。 修改…

趣测系统搭建APP源码开发,娱乐丰富生活的选择!

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 趣测系统提供了一个集合多种有趣测试的平台,如心理测试和星座测试等,这些测试内容富有趣味性和娱乐性,能够帮助大众在忙碌的生活中找到放松和娱乐的时刻…

yolov5驾驶员不规范行为检测

1 项目介绍 1.1 摘要 随着汽车工业的迅速发展和交通拥堵的加剧,驾驶员在行车过程中的不规范行为成为了导致交通事故频发的重要因素之一。为了减少交通事故的发生,保障道路安全,提高驾驶员的行车安全意识,本研究致力于实现驾驶员…

5. PyTorch+NCCL源码编译

系列文章 第1章 多机多卡运行nccl-tests 和channel获取第2章 多机多卡nccl-tests 对比分析第3章 使用tcpdump抓取rdma数据包第5章 PyTorchNCCL源码编译 目录 系列文章前言一、本地环境二、安装cudnn三、使用pytorch自带NCCL库进行编译安装1. 源码编译2. 查看版本和all_reduce测…

【机器学习】机器学习重要方法——迁移学习:理论、方法与实践

文章目录 迁移学习:理论、方法与实践引言第一章 迁移学习的基本概念1.1 什么是迁移学习1.2 迁移学习的类型1.3 迁移学习的优势 第二章 迁移学习的核心方法2.1 特征重用(Feature Reuse)2.2 微调(Fine-Tuning)2.3 领域适…

【启明智显分享】典型的HMI应用实现方案:帮你更好地主控选型!

HMI是操作者与机器/系统间资讯传递和交换的主要桥梁。HMI系统通常能提供丰富的资讯,例如温度、压力、制造流程步骤以及材料的计量数据。还能显示设备中物料的确切位置或储存槽内的液位数据等讯息。无论是在工业自动化还是医疗、商业等重要行业领域,HMI都…

【前端项目笔记】6 参数管理

参数管理 效果展示: 在开发功能之前先创建分支goods_params cls 清空终端 git branch 查看所有分支 git checkout -b goods_params 新建分支goods_params git push -u origin goods_params 把本地的新分支推送到云端origin并命名为goods_params 参数管理需要维…