08.QT控件:QWidget

一、Widget 简介

        Widget 是 Qt 中的核⼼概念.。英⽂原意是 "小部件",我们此处也把它翻译为 "控件"。控件是构成⼀个图形化界⾯的基本要素。
        Qt 作为⼀个成熟的 GUI 开发框架, 内置了⼤量的常⽤控件。并且 Qt 也提供了 "⾃定义控件" 的能⼒,可以让开发者在现有控件不能满⾜需求的时候, 对现有控件做出扩展,,或者⼿搓出新的控件。

二、QWidget介绍

1. 简介

        在 Qt 中, 使⽤ QWidget 类表⽰ "控件",像按钮、视图、输⼊框、滚动条等具体的控件类,都是继承⾃ QWidget.。可以说, QWidget 中就包含了 Qt 整个控件体系中 通⽤的部分

2. 常用核心属性介绍

2.1 enabled

所谓 “禁用” 指的是该控件不能接收任何用户的输⼊事件,并且外观上往往是灰⾊的。
如果⼀个 widget 被禁用,则该 widget 的子元素也被禁用。

2.2 geometry

x 横坐标
y 纵坐标
width 宽度
height ⾼度

2.3 window frame的影响

(1)window frame简介
window frame(窗口框架)通常指的是窗口的外部边框部分,包括窗口的标题栏、边框和窗口控制按钮(最小化、最大化、关闭按钮等)
(2)window frame的影响
        如果 widget 作为⼀个窗⼝ (带有标题栏,最⼩化,最⼤化,关闭按钮),那么在计算尺⼨和坐标的 时候就有两种算法,包含 window frame 和 不包含 window frame:
其中 x(),y(),frameGeometry(),pos(),move() 都是按照包含 window frame 的⽅式来计算的。
其中 geometry(),width(),height(),rect(),size() 则是按照不包含 window frame 的⽅式来计算的。
当然, 如果⼀个不是作为窗⼝的 widget , 上述两类⽅式得到的结果是⼀致的。

2.4 windowTitle

注意:上述设置操作针对不同的 widget 可能会有不同的⾏为。如果是顶层 widget (独⽴窗⼝),这个操作才会有效,如果是子widget,这个操作⽆任何效果。

2.5 windowIcon

注意:同 windowTitle,上述操作仅针对顶层 widget 有效。
2.5.1 QIcon图标类
QIcon是 Qt 中用于表示图标的类。它用于加载、显示和管理图标,可以在按钮、工具栏、菜单等各种用户界面元素中使用。
(1)建议在栈上创建:QIcon本身是一个比较小的对象,创建目的是为了设置到某个QWidget内,QIcon本身是否释放不会影响图标最终的显示。
(2)QIcon不支持对象树机制,无法为其挂载父对象。
(3)创建方式:QIcon icon("图片路径");路径不要带中文;使用'/'或'\\'作为路径分隔。
2.5.2 qrc机制
使用QIcon("图片路径")加载图标,存在两个问题:
(1)需要确保图片所在的路径在目标用户机上存在;
(2)需要确保图片不会被丢失;
qrc机制就是从根本上解决上述两个问题:
(1)给项目引入一个额外的xml文件(后缀名使用.qrc表示);
(2)在这个xml中将要使用的图片导入进来,并在xml中进行记录;
(3)QT在编译项目时,会根据qrc中描述的图片信息,找到图片内容并取出图片的二进制数据;
(4)将二进制数据转换为C++代码,编译到最终的.exe中;
qrc缺点:
(1)无法导入太大的资源文件;
(2)使.exe程序更大;
qrc使用示例:
(1)新建Qt Resource File
(2)将图片导入qrc文件中
1)创建“前缀”(Prefix)
所谓的“前缀”可以理解为虚拟的目录,这个目录并没有在电脑上真实存在,而是由Qt抽象出来。
2)将图片导入到资源文件中

        注意:需要确保导入的图片必须在.qrc文件的同级目录,或同级目录中的子目录中。看到如图中所示的虚拟目录和图片,则说明导入成功。

(3)使用qrc文件中的图片数据

        图片加载路径使用':'开头,即表示使用qrc中的图片资源。

        此时我们查看编译生成的文件中,并没有该图片,但是会多出一个qrc_xxxxx.cpp文件:

        打开这个文件,能够看到一个qt_resource_data数组,里面存储的就是Title1.jpg这个图片每个字节数据:

        当Qt项目进行编译时,这个cpp文件就会被一起编译到exe程序中,当exe程序运行时,图片数据也就同步被加载到了内存中,避免资源丢失情况。

2.6 windowOpacity(透明度)

        写一个简单的程序,每次减少或增加0.1不透明度,通过QDebug输出每次修改后的界面不透明度,会发现得到类似以下结果:

(1)增加到1时,继续增加将会维持为1不再改变;减少到0后,继续减少将会维持为0不再改变;
(2)真实的数值并没有严格的减少或增加0.1(C++中float类型遵守IEEE 754标准,存储和计算导致的精度丢失)

2.7 cursor(鼠标光标)

(1)通过ui界面修改控件cursor属性

(2)通过代码修改控件cursor属性

Qt中内置的光标:

(3)设置自定义光标
①将图片导入qrc资源文件(参考2.5.2qrc机制)
②访问到图片:
Qt中存在多种表示图片的对象,这里以QPixmap为例: QPixmap pixmap(":/image1.jpg");
③使用图片构造QCursor对象: QCursor cursor(pixmap);

注意:此时鼠标点击生效位置默认是图片的左上角

④设置光标热点位置: QCursor customCursor(cursorPixmap, hotX, hotY);
热点:鼠标点击时,鼠标图标的响应位置
hotX、hotY是热点相对于图标左上角原点位置,单位为像素
其他可控操作:
①缩放图片大小
QPixmap pixmap(":/image1.jpg");
pixmap = pixmap.scaled(100, 100);

注意:缩放不是修改图片本身,而是返回一个新的图片副本,所有需要重新赋值。

②免费图标获取推荐:阿里巴巴 矢量图标库

2.8 font

font:

QFont:

2.9 toolTip(悬停提示)

2.10 focusPolicy

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

Qt::FocusPolicy是一个枚举类型,取值如下:
Qt::NoFocus:控件不会接收键盘焦点;
        Qt::TabFocus:控件可以通过Tab键接收焦点;
Qt::clickFocus:控件在鼠标点击时接收焦点;
        Qt::strongFocus:控件可以通过Tab键和鼠标点击接收焦点(默认值);
        Qt::wheelFocus:类似于Qt::StrongFocus,同时控件也可以通过鼠标滚轮获取到焦点(新增的选项,一般很少使用)。

2.11 styleSheet

QSS(Qt Style Sheets)是Qt框架中用于样式定义的机制,类似于CSS(Cascading Style Sheets)。它允许开发者通过类似于CSS的语法来自定义和控制Qt应用程序中UI元素的外观和风格,包括但不限于窗口、按钮、文本框等组件的背景、字体、边框、大小等属性。
后续会详细介绍qss使用。

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

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

相关文章

《第一行代码 第3版》学习笔记——第十一章 网络技术

1 webview用法 class MainActivity : ComponentActivity() {SuppressLint("SetJavaScriptEnabled")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {NetWorkDemoTheme {// A surface container using the bac…

主流MQ对比和选型

在以下几个我们比较关心的维度进行对比 ActiveMQ RabbitMQ RocketMQkafka官网https://activemq.apache.org/https://www.rabbitmq.com/https://rocketmq.apache.org/https://kafka.apache.org/githubhttps://github.com/apache/activemqhttps://github.com/rabbitmqhttps://g…

AI如何让办公更智能?WPS AI海外版给出答案

导读:从语义检查到一键生成PPT,WPS Office海外版如何面向2亿月活用户快速推出AI功能? 近日,WPS Office海外版应用亚马逊云科技Amazon Bedrock等生成式AI技术与服务,在海外正式推出人工智能应用WPS AI海外版&#xff0c…

Postman测试,如何保持用户登录状态?

为了在Postman中保持用户登录状态,我们可以使用以下步骤: 1. 下载和安装Postman 首先,我们需要下载和安装Postman。Postman是一个流行的API开发和测试工具,可以帮助我们发送HTTP请求并测试API的功能。 2. 创建一个新的Postman …

【Vue】vue-router路由使用

前言 Vue Router是Vue框架中非常重要的一个功能。 目标 1 单页面应用与多页面应用的区别; 2 vue-router的具体实现方法; 3 路由模式有哪几种,有什么区别; 4 如何进行路由守卫与路由缓存; 一 路由的概念 概念 Vue Router是Vue提供的路由管理器。将组件与路由一一对应起来,…

6-2 归并排序

6-2 归并排序 分数 10 全屏浏览 切换布局 作者 软件工程DS&A课程组 单位 燕山大学 以下代码采用分而治之算法实现归并排序。请补充函数mergesort()的代码。提示:mergesort()函数可用递归实现,其中参…

Conda创建与激活虚拟环境(指定虚拟环境创建位置)

1.Conda优势 Conda是一个开源的软件包管理系统和环境管理系统,主要用于在不同的计算环境中安装和管理软件包和其依赖项。它最初是为Python而设计的,但现在也可以用于管理其他语言的软件包。 Conda提供了对虚拟环境的支持,这使得用户可以在同…

如何在Java中处理UnsupportedOperationException异常?

如何在Java中处理UnsupportedOperationException异常? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java编程中,我们经常会遇到各…

swiper实例

大家好,我是燐子,今天给大家带来swiper实例 微信小程序中的 swiper 组件是一种用于创建滑动视图的容器组件,常用于实现图片轮播、广告展示等效果。它通过一系列的子组件 swiper-item 来定义滑动视图的每一个页面。 基本用法 以下是一个简单的…

ESAPI.setAttribute设置值前端取不到

我在后端使用java设置email request.setAttribute("email",ESAPI.encoder().encodeForHTML("123456qq.com"))前端jsp页面获取不到&#xff0c; var email"<%ESAPI.encoder().encodeForHTML(request.getParameter("email"))%>"…

web前端——HTML

目录 一、HTML概述 1.HTML是什么&#xff1f; 2.HTML具体化解释 二、HTML基本语法 1.声明 2. Head头标签 3.body身体标签 4.一个html的基本结构 5.标签 6.标签属性 ①属性的格式 ②属性的位置 ③添加多个属性 三、基本常用标签 1.超链接 2.图像标签 ①图像标…

springboot集成JPA并配置hikariCP连接池问题解决

一、引入需要的依赖 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-parent</artifactId><version>2.3.2.RELEASE</version><relativePath/></parent> jpa依赖 <!--…

从零开始做题:会打篮球的鸡

会打篮球的鸡 1 题目 给你password你帮鸡肋找找会打篮球的鸡在哪儿行吗&#xff1f; password:iVBORw0KGgoAAAANSUhEUgAAAgAAAPoCAIAAADCwUOzAAAACXBIWXMAAAsTAAALEwEAmpwYAAB2KElEQVR4nO3dd3xb1f3/8WvLe8QjdpbtxJm2Eyd29t6LJBBWgEICFAqUUmaBlrZ8Ke23fLFUvYsYRQKZScECGQHkpC9…

OpenGL进阶系列1 - OpenGL1.x和2.x功能演进(上古历史)

时间版本功能详细描述1992v1.0 NewList/EndList/CallListglspec10.pdfBegin/Endglspec10.pdfVertex/TexCoord/Color/Normal/Index/Rectglspec10.pdfMatrixMode/LoadMatrix/Multmatrixglspec10.pdfRoate/Translate/Scaleglspec10.pdf

1964springboot VUE小程序在线学习管理系统开发mysql数据库uniapp开发java编程计算机网页源码maven项目

一、源码特点 springboot VUE uniapp 小程序 在线学习管理系统是一套完善的完整信息管理类型系统&#xff0c;结合springboot框架uniapp和VUE完成本系统&#xff0c;对理解vue java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;…

DLS平台:GPT-5预计于2025年底至2026年初发布,将实现“博士水平”智能

摘要 OpenAI首席技术官Mira Murati近日透露&#xff0c;GPT-5可能推迟到2025年底或2026年初发布。这一消息打破了市场对GPT-5在2023年底或2024年夏季发布的预期。尽管推迟&#xff0c;但GPT-5将实现显著的性能飞跃&#xff0c;在特定任务中达到“博士水平”的智能。这标志着人…

Java 8 Date and Time API

Java 8引入了新的日期和时间API&#xff0c;位于java.time包下&#xff0c;旨在替代旧的java.util.Date和java.util.Calendar类。新API更为简洁&#xff0c;易于使用&#xff0c;并且与Joda-Time库的一些理念相吻合。以下是Java 8 Date and Time API中几个核心类的简要概述&…

[modern c++][11/14] 变参模板的使用

前言&#xff1a; c 11 引入和变参模板用来处理任意数量模板参数的场景。 变参模板函数 &#xff08;C11/14 迭代展开 | 一个模板参数和一个模板参数包&#xff09; #include <iostream> #include <string>void MyPrint(){std::cout << " end" …

JDBC的概念 ,核心API的介绍 , 注册驱动介绍

第一章 JDBC 1、JDBC的概念 目标 能够掌握JDBC的概念能够理解JDBC的作用 讲解 客户端操作MySQL数据库的方式 使用第三方客户端来访问MySQL&#xff1a;SQLyog、Navicat 使用MySQL自带的命令行方式 通过Java来访问MySQL数据库&#xff0c;今天要学习的内容 如何通过Java代…

ubuntu server 24.04 使用记录

我安装 Ubuntu server 24.04 选择了 minimal 方式&#xff0c;发现不知道是忘记选了还是怎样&#xff0c;ssh 无法登录。 本来以为 24.04 上只会遇到和 22.04 上一样的问题&#xff0c;校网需要验证。经过几周分析研究&#xff0c;终于摸清楚了校网验证过程&#xff0c;然后写…