【QT】Widget

news2025/1/15 17:39:22

目录

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.coloradmin.cn/o/1853859.html

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

相关文章

C# 类中访问修饰符的优先级

参考链接 : C# 指南 - .NET 托管语言 | Microsoft Learn 访问修饰符 - C# | Microsoft Learn

Stable Diffusion初体验——基于机器学习通过神经网络的强大AI平台

文章目录 前言最新热门活动!!平台介绍 一.创建应用 Stable Diffusion WebUI初始化上传模型,VAE,lora 介绍sd模型,vae,lora模型进入应用文生图工作区调参区图生图 结语小程序活动——6.20火热上线&#x1f5…

【b站-湖科大教书匠】2 物理层-计算机网络微课堂

课程地址:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 2 物理层 2.1 物理层的基本概念 2.2 物理层下面的传输媒…

Web渗透:文件上传-后端过滤

在上一篇文件上传的内容中笔者阐述了文件上传漏洞产生的相关原理以及使用了一个pikachu靶场的例子进行演示,在这个例子中涉及到了前端代码对于文件上传漏洞的相关防护,以及站在攻击者的角度我们要如何绕过前端的防护成功进行攻击;但是事实上对…

每日签到页面模板组件,简单好用,用了会上瘾的那种

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。 今日给…

Django之云存储(二)

一、Django使用云存储 建立项目 django-admin startproject project_demo创建子应用 python manage.py startapp app_name修改配置文件,设置模板视图路径 settings.py TEMPLATES = [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [os.path.join(BASE_DIR,…

【Unity服务器01】之AssetBundle上传加载u3d模型

首先打开一个项目导入一个简单的场景 导入怪物资源, AssetBundle知识点: 1.指定资源的AssetBundle属性标签 (1)找到AssetBundle属性标签 (2)A标签 代表:资源目录(决定打包之后在哪…

微信小程序之横向列表展示

效果图 参考微信小程序可看 代码&#xff1a; <view class"lbtClass"><view class"swiper-container"><scroll-view class"swiper" scroll-x"true" :scroll-left"scrollLeft"><block v-for"(six…

怎么用Excel生成标签打印模板,自动生成二维码

环境&#xff1a; EXCEL2021 16.0 问题描述&#xff1a; 怎么用excel生成标签打印模板自动生成二维码 解决方案&#xff1a; 在Excel中生成标签打印模板并自动生成二维码&#xff0c;可以通过以下几个步骤完成&#xff1a; 1. 准备数据 首先&#xff0c;确保你的Excel表…

C#.net6.0+sqlserver2019医院手术麻醉信息管理系统源码 可对接院内HIS、LIS、PACS 支持二次开发

C#.net6.0sqlserver2019医院手术麻醉信息管理系统源码 可对接院内HIS、LIS、PACS 支持二次开发 手麻系统的功能涵盖了麻醉临床业务管理、麻醉运营业务管理以及手术进程管理等&#xff0c;实现了将多种麻醉病历文书与医院HIS系统的有效关联&#xff0c;让手术室人员、设备资源和…

鹅算法(GOOSE Algorithm,GOOSE)求解复杂城市地形下无人机避障三维航迹规划,可以修改障碍物及起始点(Matlab代码)

一、鹅算法 鹅优化算法&#xff08;GOOSE Algorithm&#xff0c;GOOSE)从鹅的休息和觅食行为获得灵感&#xff0c;当鹅听到任何奇怪的声音或动作时&#xff0c;它们会发出响亮的声音来唤醒群中的个体&#xff0c;并保证它们的安全。 参考文献 [1]Hamad R K, Rashid T A. GOO…

day16--513.找树左下角的值+112. 路径总和+106.从中序与后序遍历序列构造二叉树

一、513.找树左下角的值 题目链接&#xff1a;https://leetcode.cn/problems/find-bottom-left-tree-value/ 文章讲解&#xff1a;https://programmercarl.com/0513.%E6%89%BE%E6%A0%91%E5%B7%A6%E4%B8%8B%E8%A7%92%E7%9A%84%E5%80%BC.html 视频讲解&#xff1a;https://www.b…

JavaSE基础总结复习之面向对象の知识总结

目录 Java语言的基础特点 面向对象 类和对象 类 类的构造 一&#xff0c;发现类 二&#xff0c;发现类的共有属性&#xff08;成员变量&#xff09; 三&#xff0c;定义类的成员方法&#xff08;行为&#xff0c;动词&#xff09; 四&#xff0c;使用类创建对象 对象…

Linux——man帮助命令

一、man 获得帮助信息 基本语法&#xff1a;man [命令或配置文件] &#xff08;功能描述&#xff1a;获得帮助信息&#xff09; 查看 ls 命令的帮助信息 [roothadoop101 ~]# man ls man [数字] [函数] 1、Standard commands &#xff08;标准命令&#xff09; 2、System…

Structured Steaming结构化流详解:大案例解析(第12天)

系列文章目录 一、结构化流介绍&#xff08;了解&#xff09; 二、结构化流的编程模型&#xff08;掌握&#xff09; 三、Spark 和 Kafka 整合&#xff0c;流处理&#xff0c;批处理演示&#xff08;掌握&#xff09; 四、物联网数据分析案例&#xff08;熟悉&#xff09; 文章…

【服务器06】之【如何不开外网连接GitHub】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字&#xff0c;点击创建存储库就可以了 首先 如何在不开外网的条件下使用GitHub 第一步 下载安装Steam(Watt TooklKit) 区分一下如何查看哪个官网&#xff08;没有百度广告就是…

CPP-类对象大小的组成

要计算一个类对象的大小要先明白一个问题&#xff1a;类中既可以有成员变量&#xff0c;又可以有成员函数&#xff0c;那么一个类的对象中包含了什么&#xff1f; 下面来看一段代码&#xff1a; // 类中既有成员变量&#xff0c;又有成员函数 class A1 { public:void f1() {} …

Pytorch调试出错记录

一、搭建环境&#xff1a; LINUX-64 1、 nvidia-smi &#xff1a;NVIDIA-SMI 470.63.01 Driver Version: 470.63.01 CUDA Version: 11.4 2、安装conda&#xff1a;下载最新版上传安装 3、安装pytorch&#xff08;安装成功&#xff0c;但可能报错&#xff09; : conda in…

AI 大模型应用开发实战(04)-AI生态产业拆解

1 行业全景图 2 结构拆解AI GC 生成式AI这个产业。分成上中下游三大块。 2.1 上游基础层 主要包括&#xff1a; 算力&#xff1a;包括AI芯片和云服务等&#xff0c;例如像英伟达、AMD以及华为等厂商提供的算力基础设施。大型模型基于Transformer架构&#xff0c;对算力的需…

redis主从复制、哨兵、集群

在实际的生活环境中&#xff0c;如果只使用一个redis进行读写操作&#xff0c;那么面对庞大的访问人群是崩溃的&#xff0c;所以可以有几个redis&#xff0c;一个用来做主机&#xff0c;提供修改数据操作&#xff0c;而这个主机用来控制其他redis&#xff0c;即将更新的发送&am…