【QT】常用控件(一)

在这里插入图片描述

个人主页~


常用控件

  • 一、控件是什么
  • 二、QWidget核心属性
    • 1、enabled
    • 2、geometry
    • 3、windowTitle
    • 4、windowIcon
    • 5、windowOpacity
    • 6、cursor
    • 7、font
    • 8、toolTip
    • 9、focusPolicy
    • 10、styleSheet

一、控件是什么

ui设计界面左边的这些都叫控件,除了这些以外,QT还允许自定义控件,满足不同的需求
在这里插入图片描述

二、QWidget核心属性

1、enabled

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

我们来写一个用一个按钮控制另一个按钮可用状态的QT程序

我比较喜欢用ui界面转到槽的方式写QT程序

#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_control_clicked()
{if(ui->pushButton->isEnabled() == true)ui->pushButton->setEnabled(false);elseui->pushButton->setEnabled(true);
}void Widget::on_pushButton_clicked()
{qDebug() << "可以使用";
}

当将控件设置为不可用时,颜色偏暗淡,不可点击

enabled

2、geometry

API说明
geometry()获取到控件的位置和尺寸,返回的结果是QRect,包含x,y,width,height,其中x和y是左上角坐标
setGeometry(QRect) / setGeometry(int x,int y,int width,int height)设置空间的位置和尺寸,分为两种方式

geometry在中文里是几何的意思,表示一个物体的几何性质,它有四个参数以表示空间的几何性质,左上角的坐标x,y以及控件的宽度和高度

geometry_1

geometry_2

第一个视频仅控制左上角坐标,这样会导致width和height跟着变化,因为我们用的是setX和setY,强制改变了左上角坐标
第二个视频的效果也可以直接使用move函数进行控制

这里还有一个有趣的程序

#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_clicked()
{ui->label->setText("感谢导员,我出去玩了");
}void Widget::on_pushButton_2_clicked()
{int width = this->geometry().width();//获取窗口宽度int height = this->geometry().height();//获取窗口高度int x = rand() % width;int y = rand() % height;//保证按钮在窗口内//这里用的moveui->pushButton_2->move(x, y);}

geometry_3

我们知道,窗口都会带有下面红色方框中的内容,这个东西叫做window frame,我们在使用geometry的时候的x,y是不包含这个的,要想使用window frame的左上角就要用frameGeometry这个函数
在这里插入图片描述
通过geometry和frameGeometry就可以实现整个窗口以及控件的移动操作,但是我们有很多的API,虽然设计的比较冗余,但是QT一个特点就是尽量符合人的直觉,就是我们有可能不用通过官方文档就能把程序写对

3、windowTitle

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

在这里插入图片描述

4、windowIcon

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

在这里插入图片描述
在这里插入图片描述
窗口和任务栏图标都会变成设置成的照片

但是我们一般不会通过文件的绝对路径引入照片,因为我们无法保证我D盘中的图片在你的D盘当中也有,我们还有两种办法,一种是相对路径,另一种是使用qrc,相对路径的方法就是在该项目的工作目录中建一个新的文件夹用来专门存放图片,比如文件夹的名字叫做photo,当我们需要使用时写"./photo/slm.jpg",但是这样的话还是会因为用户误删而导致照片无法使用,这时对于这种图片一类的小文件,我们可以使用qrc来直接将图片转化为二进制代码存储在项目当中,这样就永远不会丢失了

右键点击Add New,选择Qt resource file,起一个英文名字,这里叫resource file
在这里插入图片描述

在这里插入图片描述
点击Add Prefix,将前缀改为/
在这里插入图片描述
然后点击Add Files,将要加入的图片放到qrc文件的同级目录中,下面是添加完毕的效果
在这里插入图片描述
在代码中这样使用:
在这里插入图片描述
这里的 : 作为开头,表示从qrc中读取资源
这里的 / 是上面配置的前缀
这里的 slm.jpg 是资源名称

qrc适合管理小的资源,对图片类的很有效,不过对于视频一类的大资源是不行的,因为这会导致exe文件也变大

5、windowOpacity

API说明
windowOpacity()获取到控件的不透明数值,返回float,取值为0.0~1.0,0.0表示透明,1.0表示完全不透明
setWindowOpacity(float n)设置控件的不透明数值

opacity_1

6、cursor

API说明
cursor()获取到当前widget的cursor属性,返回QCursor对象,当鼠标悬停在该widget上时,就会显示出对应的形状
setCursor(const QCursor& cursor)设置该widget光标的形状,仅在鼠标停留在该widget上时生效
QGuiApplication::setOverrideCursor(const QCursor& cursor)设置全局光标的形状,对整个程序中的所有widget都会生效,覆盖上面的setCursor设置的内容

我们可以直接通过属性栏来控制,也可以使用代码控制
在这里插入图片描述

cursor_1

代码版本:
在这里插入图片描述

cursor_2

这是系统内置的所有光标形状,是以一个枚举体来存储的
在这里插入图片描述
我们来将光标改变为自定义图片

首先使用qrc将图片加载进去,步骤如同上文,不再赘述,然后定义一个位图对象加载并缩放图片,然后将图片设置为光标形状

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPixmap pixmap(":/slm.jpg");//创建位图对象并加载自定义图片pixmap = pixmap.scaled(32,32);//缩放图片为32*32QCursor cursor(pixmap,3,3);//这里的3,3是热点的位置,也就是点击时的有效位置this->setCursor(cursor);
}Widget::~Widget()
{delete ui;
}

cursor

7、font

API说明
font()获取当前widget的字体信息,返回QFont对象
setFont(const QFont& font)设置当前widget字体信息

这里的QFont有七种属性
family:字体
pointSize:字体大小
weight:字体粗细
bold:是否加粗
italic:是否倾斜
underline:是否有下划线
strikeOut:是否有删除线

我们可以通过属性面板直接设置
在这里插入图片描述
也可以通过代码和ui一起实现
在这里插入图片描述

8、toolTip

API说明
setToolTip设置toolTip,鼠标悬停时会有提示说明
setToolTipDuring设置toolTip提示的时间

toolTip

9、focusPolicy

API说明
focusPolicy()获取该widget的focusPolicy,返回Qt::FocusPolicy
setFocusPolicy(Qt::FocusPolicy)设置widget的focusPolicy

Qt::FocusPolicy是一个枚举类型,取值如下
在这里插入图片描述

enum FocusPolicy {NoFocus = 0,//控件不会接收键盘焦点TabFocus = 0x1,//控件可以通过Tab键接收焦点ClickFocus = 0x2,//控件在鼠标点击时接收焦点StrongFocus = TabFocus | ClickFocus | 0x8,//控件可以通过Tab键和鼠标点击接收焦点(默认)WheelFocus = StrongFocus | 0x4//在上一条的基础上增加鼠标滚轮获取焦点};

这个就不必多说了,只要是平常玩玩电脑的看完这些解释都就知道这个焦点的概念,虽然不好说出来,但是抽象的概念大家都是有的,当我们给控件设置这些枚举值时会达到对应的效果

10、styleSheet

通过QSS设置widget的样式,QSS是QT借鉴CSS的,只支持CSS其中的一部分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当然这里的color不是只有我们认识的那几个单词的颜色,自然界的颜色有无数种,在计算机中,颜色是由一个个像素光点显示的,它通过RGB,也就是red,green,blue三种颜色的深浅来控制可以形成所有的颜色,对于8位深度的显示器来说,它们每一个颜色深度都是由一个字节来存储的,也就是说电脑能够呈现的颜色有256256256种,也就是1600多万种,对于更高规格的显示器这个数字会更多


今日分享就到这~

在这里插入图片描述

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

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

相关文章

竹壳天气时钟(二)第二阶段任务已完成

一、简介 准备用基于esp8266的nodemcu开发板做一个天气时钟。 一步一步记录代码编写过程。 竹壳天气时钟 Bamboo shell weather clock 使用基于esp8266的NodeMCU制作。 计划用竹子做最后成品的外壳&#xff0c;所以才有了这个名称。 第一阶段任务&#xff1a; 1.开启混合模式&…

2025推荐选题|基于MVC的农业病虫害防治平台的设计与实现

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…

Golang | Leetcode Golang题解之第477题汉明距离总和

题目&#xff1a; 题解&#xff1a; func totalHammingDistance(nums []int) (ans int) {n : len(nums)for i : 0; i < 30; i {c : 0for _, val : range nums {c val >> i & 1}ans c * (n - c)}return }

tkinter库的应用小示例:文本编辑器

tkinter库的应用小示例&#xff1a;文本编辑器 要 求&#xff1a; 创建一个文本编辑器&#xff0c;功能包括&#xff0c;创建、打开、编辑、保存文件。一个Button小组件&#xff0c;命名为btn_open,用于打开要编辑的文件&#xff0c;一个Button小组件&#xff0c;命名为btn_s…

【Ubuntu】“Linux版PhotoShop”绘图软件的安装和汉化

【Ubuntu】“Linux版PhotoShop”绘图软件的安装和汉化 零、前言 最近换了Linux系统&#xff0c;但是写教程做PPT的时候还是得用到绘图软件&#xff0c;上网一查&#xff0c;总结对比之后发现Krita比较好用&#xff0c;故此讲解一下如何安装和汉化Krita。 壹、安装 安装很简…

linux 环境下 docker 镜像获取失败, 重新设置docker镜像下载地址

1.查询镜像地址 https://hub.atomgit.com/repos/amd64/openjdk 2.docker file FROM hub.atomgit.com/amd64/openjdk:21-rc-jdk COPY xxxx.jar xxxx.jar EXPOSE xxxxx ENTRYPOINT ["java","-jar","-Xmx200M","-agentlib:jdwptransportdt_…

Unity中搜索不到XR Interaction Toolkit包解决方法

问题&#xff1a; 针对Unity版本2020.3在中PackageManager可能搜素不到XR Interaction Toolkit包 在Package Manager中未显示XR Interaction Toolkit包 解决方法&#xff1a; Package manager左上角&#xff0c;点加号&#xff0c;选择 Add package from git URL..&#xff0c;…

MATLAB基础应用精讲-【数模应用】Bland-Altman图(附python和R语言代码实现)

目录 前言 几个高频面试题目 Bland-altman图:如何改变y轴 算法原理 Bland-Altman一致性分析 一致性界限 1. 背景介绍 2. Bland-Altman 法 3. batplot 命令介绍 4. 应用实例 Prism GraphPad实现Bland-Altman图 1.输入数据 2.从数据表中选择Bland-Altman分析 3.检…

Mysql(2)—SQL语法详解(通俗易懂)

一、关于SQL 1.1 简介 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种用于管理关系型数据库的标准编程语言。它主要用于数据的查询、插入、更新和删除等操作。SQL最初在1970年代由IBM的研究人员开发&#xff0c;旨在处理关系数据模型…

Pytorch基础:设置随机种子

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 有时候&#xff0c;如果需要代码在多个运行中具有可重复性&#xff0c;可以通过以下方式来设置随机种子&#xff1a; import torch import numpy as np import r…

Python技术深度探索:从基础到进阶(系列一)

Python技术深度探索&#xff1a;从基础到进阶&#xff08;系列一&#xff09; 在编程的世界里&#xff0c;Python以其简洁的语法、强大的库支持和广泛的应用领域&#xff0c;成为了无数开发者心中的“瑞士军刀”。无论是数据分析、机器学习、Web开发&#xff0c;还是自动化脚本…

【前端】Bootstrap:JavaScript 组件与插件

Bootstrap 不仅提供了强大的 CSS 工具和组件&#xff0c;还内置了丰富的 JavaScript 组件和插件。这些 JavaScript 组件能够增强网页的交互性&#xff0c;让开发者在不编写大量 JavaScript 代码的情况下快速实现各种动态效果。Bootstrap 的 JavaScript 组件基于 jQuery&#xf…

qt+opengl 实现纹理贴图,平移旋转,绘制三角形,方形

1 首先qt 已经封装了opengl&#xff0c;那么我们就可以直接用了&#xff0c;这里面有三个函数需要继承 virtual void initializeGL() override; virtual void resizeGL(int w,int h) override; virtual void paintGL() override; 这三个函数是实现opengl的重要函数。 2 我们…

带你了解linux:学习第十六课 linux 之 Ftp Sftp

今天要介绍的是最常用的传输工具 Ftp和Sftp。 FTP&#xff08;File Transfer Protocol&#xff09;和SFTP&#xff08;Secure File Transfer Protocol&#xff09;是两种用于在网络上进行文件传输的协议。FTP是较早的协议&#xff0c;而SFTP是基于SSH&#xff08;Secure Shell…

E: Unable to locate package:无法定位包的完美解决方法 ️

博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 《java 专栏》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请读者海涵指正。☕&#x1f36d; 《MYSQL从入门到精通》数据库是开…

Bug剖析

Bug剖析 • 所有的Bug报告有以下的基本要求&#xff1a; • 标题。要简略。 • 指派。谁来处理这个问题。 • 重现步骤。问题再次出现的相关步骤。 • 优先级别。问题的紧迫性与重要性。 • 严重程度。问题所产生的后果。 • 解决方案。怎么解决问题。 其他很多方面对修复问题…

LabVIEW提高开发效率技巧----点阵图(XY Graph)

在LabVIEW开发中&#xff0c;点阵图&#xff08;XY Graph&#xff09; 是一种强大的工具&#xff0c;尤其适用于需要实时展示大量数据的场景。通过使用点阵图&#xff0c;开发人员能够将实时数据可视化&#xff0c;帮助用户更直观地分析数据变化。 1. 点阵图的优势 点阵图&…

树莓派应用--AI项目实战篇来啦-17.YOLOv8目标检测-安全帽检测

1. YOLOv8介绍 YOLOv8是Ultralytics公司2023年推出的Yolo系列目标检测算法&#xff0c;可以用于图像分类、物体检测和实例分割等任务。YOLOv8作为YOLO系列算法的最新成员&#xff0c;在损失函数、Anchor机制、样本分配策略等方面进行了全面优化和创新。这些改进不仅提高了模型的…

长芯微LSPGD1系列带气嘴DIP8封装集成表压传感器完全替代松下ADP51B62替代ADP51B62,成本更低!

描述 LSPGD1是长芯微针对家电医疗等市场推出的经过校准的表压传感器系列产品。该系列产品采用高性能信号调理芯片对MEMS压阻芯体输出进行温度和压力的校准和补偿&#xff0c;保证性能和可靠性的同时对封装进行了集成&#xff0c;易于使用。LSPGD1系列集成压力传感器可选量程为…

声明式LoggerFactory.getLogger和注解@Slf4j原理区别和推荐

LoggerFactory.getLogger 和 Slf4j 注解在实现日志功能时使用的原理有一些不同&#xff0c;以下是它们的区别&#xff1a; 1. LoggerFactory.getLogger&#xff1a; 手动创建日志实例&#xff1a;使用 LoggerFactory.getLogger 方法时&#xff0c;开发者需要手动在类中声明并…