Qt的UI入门

news2024/11/24 12:38:52

二、UI入门

1. QWidget类

QWidget类是Qt中所有组件和窗口的基类,其内部规定了组件和窗口的基本规则和功能。

Qt中每个属性的文档中都有Access functions部分,表示其支持的读写(getter和setter)函数,Qt中的getter和setter函数命名具有如下规律:

  • getter的名称通常与属性同名,没有get
  • setter的名称通常是 set+属性名

QWidget常用基础属性:

  • width : const int

宽度,单位像素。

  • height:const int

高度,单位像素。

虽然宽高不能直接通过setter更改,但是可以通过下面的函数修改。

void	resize(int w, int h)

  • x : const int

横坐标,单位像素,正方向向右。

  • y : const int

纵坐标,单位像素,正方向向下。

Qt中的屏幕相当于数学的第四象限,因此原点在屏幕的左上角,组件和窗口的定位点也是其左上角。

虽然坐标不能直接通过setter更改,但是可以通过下面的函数修改。

void	move(int x, int y)

可以使用下面的函数同时设置位置和宽高。

// 参数1:横坐标
// 参数2:纵坐标
// 参数3:宽度
// 参数4:高度
void	setGeometry(int x, int y, int w, int h)

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    // 设置窗口的宽高
    resize(1000,100);
    // 移动窗口
    move(100,100);
    // 同时设置宽高和位置
    setGeometry(300,300,200,200);
}

Dialog::~Dialog()
{

}

2. 子组件

可以在窗口中放置任意组件对象,以QPushButton(点击式按钮)为例。

QPushButton的构造函数:

// 参数1:显示文字,QString是Qt中的字符串类,不再使用std::string
// 参数2:可以先认为是父窗口对象,即当前创建的对象在哪个窗口中。
QPushButton::QPushButton(const QString & text, 
                         QWidget * parent = 0)

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
// 头文件
#include <QPushButton>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    // 按钮对象
    QPushButton* btn;
};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    resize(300,300);
    // 创建一个按钮对象
    btn = new QPushButton("你好",this);
    // 移动并更改大小
    // 位置使用相对坐标
    btn->setGeometry(100,100,100,100);//相对位置,在框内的位置
}

Dialog::~Dialog()
{
    // 销毁按钮对象
    delete btn;
}

3.自定义样式

 Qt默认的组件和窗口都很丑,可以对这些对象设置样式来更改颜色效果

最常使用颜色方法RGB记色法,分别使用三个数表示红绿蓝颜色光线亮度值,使用0~255表示每个色彩的范围,可以转换为16进制,如果使用16进制,通常在颜色前加一个#

以下是配色网站:

在线颜色选择器 | RGB颜色查询对照表http://tools.jb51.net/static/colorpicker/Color Palette Generator - Create Beautiful Color SchemesSearch, discover, test and create beautiful color palettes for your projectshttps://colors.muz.li/color-palette-generator/F7F7F7

qq截图,按c复制色号

样式是一个QWidget的属性:

styleSheet : QString

通过其setter可以设置内容,内容使用QSS语法,类似于前端中的CSS语法,下面是一个已经预设好了的样式表效果,可以自行更改尝试使用。

#define QPushButton_STYTLE (QString("\
/*按钮普通态*/\
QPushButton\
{\
    font-family:Microsoft Yahei;\
    /*字体大小为20点*/\
    font-size:20pt;\
    /*字体颜色为白色*/\
    color:white;\
    /*背景颜色*/\
    background-color:rgb(14 , 150 , 254);\
    /*边框圆角半径为8像素*/\
    border-radius:8px;\
}\
/*按钮悬停态*/\
QPushButton:hover\
{\
    /*背景颜色*/\
    background-color:rgb(100 , 137 , 255);\
}\
/*按钮按下态*/\
QPushButton:pressed\
{\
    /*背景颜色*/\
    background-color:rgb(14 , 135 , 10);\
    /*左内边距为3像素,让按下时字向右移动3像素*/\
    padding-left:3px;\
    /*上内边距为3像素,让按下时字向下移动3像素*/\
    padding-top:3px;\
}"))

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
// 头文件
#include <QPushButton>

#define QPushButton_STYTLE (QString("\
/*按钮普通态*/\
QPushButton\
{\
    font-family:Microsoft Yahei;\
    /*字体大小为20点*/\
    font-size:20pt;\
    /*字体颜色*/\
    color:#c7e8ff;\
    /*背景颜色*/\
    background-color:rgb(21, 115, 179);\
    /*边框圆角半径为8像素*/\
    border-radius:8px;\
}\
/*按钮悬停态*/\
QPushButton:hover\
{\
    /*背景颜色*/\
    background-color:#1e6fff;\
}\
/*按钮按下态*/\
QPushButton:pressed\
{\
    /*背景颜色*/\
    background-color:#8fd2ff;\
    /*左内边距为3像素,让按下时字向右移动3像素*/\
    padding-left:3px;\
    /*上内边距为3像素,让按下时字向下移动3像素*/\
    padding-top:3px;\
}"))


class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    // 按钮对象
    QPushButton* btn;
};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    resize(300,300);
    btn = new QPushButton("你好",this);
    btn->setGeometry(100,100,100,100);
    // 设置样式
    btn->setStyleSheet(QPushButton_STYTLE);
}

Dialog::~Dialog()
{
    delete btn;
}

 

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

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

相关文章

Redis实现延迟队列方法介绍

延迟队列&#xff0c;顾名思义它是一种带有延迟功能的消息队列。那么&#xff0c;是在什么场景下我才需要这样的队列呢&#xff1f; 1. 背景 我们先看看以下业务场景&#xff1a; 当订单一直处于未支付状态时&#xff0c;如何及时的关闭订单如何定期检查处于退款状态的订单是…

神秘的IP地址8.8.8.8地址到底是什么?为什么会被用作DNS服务器地址呢?

当我们在配置网络连接或者路由器时&#xff0c;经常会遇到需要填写DNS服务器地址的情况。而在这些情况下&#xff0c;很多人都会听到一个神秘的数字地址&#xff1a;8.8.8.8。那么&#xff0c;这个地址到底是什么&#xff0c;为什么会被用作DNS服务器地址呢&#xff1f;本文将详…

分流稳压器TL431/TLV431

分流稳压器&#xff08;Shunt Regulator&#xff09;指的是依靠调节Ik电流来稳定输出电压&#xff0c;分流指的就是Ik来分流。 分流稳压器&#xff0c;也叫做并联电压稳压器&#xff0c;相对地&#xff0c;还有串联电压稳压器。 1、常见型号 TL431TLV431Vref2.5V1.24VVoutVref…

作为一个java工程师,你还记得java的基本数据类型有那些吗?他们的取值范围是多少?

Java是一种强类型编程语言&#xff0c;因此所有的变量都必须先声明后使用。Java基本数据类型指的是Java语言中最基本的数据类型&#xff0c;包括整型、浮点型、字符型、布尔型等。 Java基本数据类型一共有8种&#xff0c;它们分别是&#xff1a; byte&#xff08;字节型&#…

SpringCloud高频面试题--附答案

今天给大家分享SpringCloud高频面试题。下面是一张Spring Cloud核心组件关系图&#xff1a; 从这张图中&#xff0c;其实我们是可以获取很多信息的&#xff0c;希望大家细细品尝。 话不多说&#xff0c;直接开始面试&#xff0c;你准备好了吗&#xff1f; 1、什么是Spring Cl…

汽车电路图、原理框图、线束图、元器件布置图的识读技巧与要点

摘要&#xff1a; 想要读懂汽车电路图就必须把电的通路理清楚&#xff0c;即某条线是什么信号&#xff0c;该信号是输入信号、输出信号还是控制信号以及信号起什么作用&#xff0c;在什么条件下有信号&#xff0c;从哪里来&#xff0c;到哪里去。 一、汽车电路图的识读技巧 1.…

【Python习题集3】常用数据结构习题

数据结构 一、实验内容二、实验总结 一、实验内容 1.从键盘输入一个正整数列表&#xff0c;以-1结束&#xff0c;分别计算列表中奇数和偶数的和。 &#xff08;1&#xff09;源代码 n int(input("请输入一个正整数&#xff1a;")) list3 [] while n ! -1:list3.a…

【云原生|Kubernetes】02-Kubeadm安装部署Kubernetes集群

【云原生|Kubernetes】02-Kubeadm安装部署Kubernetes集群 文章目录 【云原生|Kubernetes】02-Kubeadm安装部署Kubernetes集群前言环境介绍安装kubernetes集群基础环境设置安装Kubernetes集群安装kubeadm&#xff0c;kubectl&#xff0c;kubeletkubeadm初始化集群(master节点操作…

C语言-学习之路-05

C语言-学习之路-05 函数函数分类函数的作用 函数的定义函数定义格式 函数名字、形参、函数体、返回值函数调用无参函数调用有参函数调用 函数的声明多文件&#xff08;分文件&#xff09;编程分文件编程 函数 函数分类 C语言程序都是从主函数main()开始执行的。从函数的定义角…

259页11万字智慧水利建设项目解决方案

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 1.1.1 项目建设任务 依托省政务云平台&#xff1b;建立水利专业数据的汇集、共享、交换和水利数据库、数据仓库、数据资源目录与大数据服务等&#xff1b;建立水利大数据分…

OpenGL(五)——变换

目录 一、前言 二、向量 三、矩阵 四、旋转的箱子 4.1 GLM库 4.2 构建 一、前言 前面了解渲染架构中uniform可以传递矩阵变换&#xff0c;如从RGBA到YUV&#xff0c;同时它也可以使物体通过矩阵变换动起来。 二、向量 向量是包含方向和大小的矢量&#xff0c;平面2D坐标可…

一文吃透Tomcat核心知识点

架构 首先&#xff0c;看一下整个架构图。最全面的Java面试网站 接下来简单解释一下。 Server&#xff1a;服务器。Tomcat 就是一个 Server 服务器。 Service&#xff1a;在服务器中可以有多个 Service&#xff0c;只不过在我们常用的这套 Catalina 容器的Tomcat 中只包含一…

在技术圈超卷的当下,学历到底是敲门砖还是枷锁?

前言 最近&#xff0c;突然之间被“孔乙己文学”刷屏了&#xff0c;短时间内“孔乙己文学”迅速走红&#xff0c;孔乙己是中国文学中的一位经典人物&#xff0c;他的长衫被认为是他的象征之一&#xff0c;孔乙己的长衫折射出很多现象&#xff0c;既有社会的&#xff0c;也有教育…

【Linux】进程信号及信号产生

文章目录 一. 生活层面的信号二. 进程信号三. 硬件中断四. 信号产生五. Term&Core1. 核心转储的意义2. 云服务器为什么关闭核心转储3. core dump标志 六. 总结结束语 一. 生活层面的信号 在学习进程信号前&#xff0c;我们不妨认识一下现实中有哪些信号。 日常生活中&#…

净利润下滑13%,帅丰电器已掉队?

近年来&#xff0c;随着市场竞争加剧&#xff0c;厨电行业加速洗牌&#xff0c;超60%杂牌或被淘汰出局&#xff0c;三类品牌全部被清退。而作为毛利最高的厨电细分市场&#xff0c;集成灶行业吸引了大批企业涌入&#xff0c;市场渗透率快速提升&#xff0c;已经超过30%&#xf…

如何入门数据分析

如何入门数据分析&#xff1f; 随着数字经济、大数据时代的发展&#xff0c;数据已然成为当下时代最重要的盈利资源&#xff0c;让企业在做决策和计划方案时更有针对性和依据&#xff0c;能提前预测市场发展方向&#xff0c;做好布局。由此而产生的数据分析岗位也逐渐被更多企业…

亚马逊、Lazada、阿里国际、eBay、Temu、Ozon好消息不断,机会来了

1. 亚马逊第一季度营收1273.58亿美元 同比扭亏为盈 亚马逊2023财年第一季度财报。亚马逊第一季度净销售额为1273.58亿美元&#xff0c;与上年同期的1164.44亿美元相比增长9%&#xff0c;不计入汇率变动的影响为同比增长11%&#xff1b;净利润为31.72亿美元&#xff0c;上年同期…

“智慧交通”转型升级+创新发展策略

随着“互联网交通”的应用创新推陈出新&#xff0c;传统轨道交通行业客户服务中心已难以满足乘客对便捷高效的客户服务需求&#xff1b;节假日人流量激增&#xff0c;客户服务人手不足&#xff0c;交通、站点堵塞、信息更新不及时等问题是常态。因此&#xff0c;“智慧城市”交…

多租户SAAS系统涉及实战解决方案—案例JeecgBoot低代码平台

JeecgBoot免费低代码平台&#xff0c;提供一键切换多租户模式机制&#xff01;快速实现全系统的saas租户方案&#xff0c;通过租户ID进行数据隔离。 租户设计思路 1、开启全系统租户隔离 开启方法 将 org.jeecg.config.mybatis.MybatisPlusSaasConfig#OPEN_SYSTEM_TENANT_CO…

为什么是三次握手和四次挥手

文章目录 为什么是三次握手为什么是四次挥手什么是TIME_WAIT状态解决TIME_WAIT状态引起的bind失败的方法 为什么是三次握手 因为这是双方都有收发的最小次数 握手的目的&#xff1a;确认网络好着没&#xff0c;对方好着没 确认双方主机是否健康&#xff08;双方&#xff09;…