【QT入门】 Qt代码创建布局综合运用:仿写腾讯会议登陆界面

news2024/12/23 0:21:13

往期回顾:

【QT入门】 Qt代码创建布局之水平布局、竖直布局详解-CSDN博客

【QT入门】 Qt代码创建布局之栅格布局详解-CSDN博客

【QT入门】 Qt代码创建布局之分裂器布局详解-CSDN博客

【QT入门】 Qt代码创建布局综合运用:仿写腾讯会议登陆界面

一、界面分析

 

主要用到水平布局和垂直布局,大部分的用法都还算清楚:

Label标签用来放文字和图片
如果要让某个控件居中实现,在其两边加横向弹簧Horizontal Spacer
Horizontal Line实现横线的效果
toolButton按钮可以实现上面图片下面文字的效果
Lable标签的alignment属性实现靠左靠右居中的效果

这个弹簧用处挺多的,不仅可以用在居中,比如我们想实现各个控件之间有一定距离,都可以用弹簧,直接设定其长度。

布局上,基本都是横向的先水平布局,最后再整个整体垂直布局即可。

二、qss样式美化

前面已经把大体框架搭起来了,现在就只需要导入资源图片,设置qss样式基本就好了。

1、实现无边框和窗口大小化

 this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);

FramelessWindowHint 让窗口边框消失

WindowMinMaxButtonsHint实现点击最下面图标就最小化,再次点击就最大化

2、纯代码设置样式

先setText把控件内容置为空,再进行样式设置

ui.btnSet->setText("");
    ui.btnSet->setStyleSheet("QPushButton{background-image:url(:/TencentMeetingLogin/res/set.png); border:none}  \
        QPushButton::hover{ background-color:rgb(99,99,99) } ");

在qss样式里,如果代码写不下要跨行写,加了一个“\”;

几个需要掌握的方法:

background-imageurl()设置背景图片
border:none去掉按钮的边框
QPushButton::hover{ background-color:rgb(99,99,99) }:定义了鼠标悬停时按钮的样式
setStyleSheet是Qt中用于设置控件样式表的函数。通过setStyleSheet函数,可以使用类似CSS的语法为Qt控件设置样式,包括背景颜色、背景图片、边框样式、字体样式等。

3、label控件导入照片 

   ui.label_login->setText("");
    QPixmap* pix = new QPixmap(":/TencentMeetingLogin/res/logo.jpg");
    pix->scaled(ui.label_login->size(), Qt::KeepAspectRatio);
    ui.label_login->setScaledContents(true);
    ui.label_login->setPixmap(*pix);

这个可以说是很熟悉了,new一个QPixmap的指针,放图片路径,注意用scaled对图片大小和label控件大小进行自动缩放。不熟悉可以回顾一下:

【QT入门】实现一个简单的图片查看软件-CSDN博客 

【QT入门】图片查看软件(优化)-CSDN博客

4、按钮样式设计

按钮样式这一部分直接打开样式表来写,这部分慢慢熟悉

QPushButton
{
/*前景色*/
color:#0054E6;

/*背景色*/
background-color:rgb(255,255,255);

/*边框风格*/
border-style:outset;

/*边框宽度*/
border-width:0.5px

/*边框颜色*/
border-color:gray;

/*边框倒角*/
border-radius:2px;

}
/*鼠标悬浮时的效果*/
QPushButton:hover
{
/*边框颜色*/
border-color:blue;

}

5、QToolButton 

这是一个才接触的按钮,相比QPushButton,它可以实现按钮+图片的模式,图片放在下面,这里正好需要。

ui.toolbtnEmpriseWeChat->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

设置按钮的样式为ToolButtonTextUnderIcon,即图标在文本下方的样式。

三、最终效果

 

可以看到经过qss样式优化之后,基本上是差不多了的。

四、完整示例代码

#include "TencentMeetingLogin.h"

TencentMeetingLogin::TencentMeetingLogin(QWidget *parent)
    : QDialog(parent)
{
    ui.setupUi(this);
    //让窗口边框消失FramelessWindowHint
    //实现点击最下面图标就最小化,再次点击就最大化WindowMinMaxButtonsHint
    this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);
    //如果显示不出来就右键单击项目,重新扫描解决方案
    ui.btnSet->setText("");
    //ui.btnSet->setStyleSheet("QPushButton{background-image:url(:/TencentMeetingLogin/res/set.png);border:none}  \
    //    QPushButton::hover{background-color:rgb(99,99,99)}");


    ui.btnSet->setText("");
    ui.btnSet->setStyleSheet("QPushButton{background-image:url(:/TencentMeetingLogin/res/set.png); border:none}  \
        QPushButton::hover{ background-color:rgb(99,99,99) } ");
        

    ui.btnMin->setText("");
    ui.btnMin->setStyleSheet("QPushButton{background-image:url(:/TencentMeetingLogin/res/min.png); border:none}  \
        QPushButton::hover{ background-color:rgb(99,99,99) } ");

    ui.btnClose->setText("");
    ui.btnClose->setStyleSheet("QPushButton{background-image:url(:/TencentMeetingLogin/res/close.png); border:none}  \
        QPushButton::hover{ background-color:rgb(99,99,99) } ");

    ui.label_login->setText("");
    QPixmap* pix = new QPixmap(":/TencentMeetingLogin/res/logo.jpg");
    pix->scaled(ui.label_login->size(), Qt::KeepAspectRatio);
    ui.label_login->setScaledContents(true);
    ui.label_login->setPixmap(*pix);

    ui.btnWeChatLogin->setText("");
    ui.btnWeChatLogin->setStyleSheet("QPushButton{background-image:url(:/TencentMeetingLogin/res/weichatlogin.png); border:none}  \
        QPushButton::hover{ background-color:rgb(99,99,99) } ");


    ui.toolbtnPhone->setIcon(QIcon(":/TencentMeetingLogin/res/phonelogin.png"));
    ui.toolbtnPhone->setIconSize(QSize(60, 60));
    ui.toolbtnPhone->setText(u8"手机号");
    //QToolButton* toolButton = new QToolButton;
    //toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    ui.toolbtnPhone->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    ui.toolbtnPhone->setStyleSheet("border:none");

    ui.toolbtnEmpriseWeChat->setIcon(QIcon(":/TencentMeetingLogin/res/enpriseweichat.png"));
    ui.toolbtnEmpriseWeChat->setIconSize(QSize(60, 60));
    ui.toolbtnEmpriseWeChat->setText(u8"企业微信");
    ui.toolbtnEmpriseWeChat->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    ui.toolbtnEmpriseWeChat->setStyleSheet("border:none");



    ui.toolbtnSSO->setIcon(QIcon(":/TencentMeetingLogin/res/sso.png"));
    ui.toolbtnSSO->setIconSize(QSize(60, 60));
    ui.toolbtnSSO->setText(u8"SSO");
    //QToolButton* toolButton = new QToolButton;
    //toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    ui.toolbtnSSO->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    ui.toolbtnSSO->setStyleSheet("border:none");

    connect(ui.btnClose, &QPushButton::clicked, [=] {
        close();
        });

}

TencentMeetingLogin::~TencentMeetingLogin()
{}

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

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

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

相关文章

rust 面向对象编程特性、模式与模式匹配、高级特征

面向对象编程OOP 学习了结构体、枚举,它们可以包含自定义数据字段,也可以定义内部方法,它们提供了与对象相同的功能。 面向对象的四大特征:封装、继承、多态 通过pub标记为公有的结构体,在其他模块中可以访问使用这…

redis主从复制与哨兵模式

redis主从复制 Redis主从复制(Redis replication)是Redis提供的一种数据备份和故障转移机制。通过主从复制,可以将一个Redis服务器(主节点)的数据复制到一个或多个Redis服务器(从节点)。这样做…

算法设计与分析实验报告java实现(排序算法、三壶谜题、交替放置的碟子、带锁的门)

一、 实验目的 1.加深学生对算法设计方法的基本思想、基本步骤、基本方法的理解与掌握; 2.提高学生利用课堂所学知识解决实际问题的能力; 3.提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 1、排序算法…

ctf_show笔记篇(web入门---jwt)

目录 jwt简介 web345: web346: web347: web348: web349: web350: jwt简介 JSON Web Token(JWT)通常由三部分组成 Header(头部):包含了两部分信息&…

使用 Clickhouse 集成的表引擎同步数据方式详解

Clickhouse作为一个列式存储分析型数据库,提供了很多集成其他组件的表引擎数据同步方案。 官网介绍 一 Kafka 表引擎 使用Clickhouse集成的Kafka表引擎消费Kafka写入Clickhouse表中。 1.1 流程图 1.2 建表 根据上面的流程图需要建立三张表,分别Click…

Jenkins 安装部署

1、安装下载 官网地址:Jenkins 下载 war 包 1、前置环境 JDK 环境(根据 Jenkins 版本不同,需要的 JDK 版本不同,目前需要 JDK11 的版本来支持)Maven maven 官网下载压缩包 ,并将其传输到服务器&#xf…

一、OpenCV(C#版本)环境搭建

一、Visual Studio 创建新项目 二、选择Windows窗体应用(.NET Framework) 直接搜索模板:Windows窗体应用(.NET Framework) 记得是C#哈,别整成VB(Visual Basic)了 PS:若搜索搜不到,直接点击安装多个工具和…

【Linux】线程概念及线程互斥

目录 线程概念 线程优点 线程缺点 线程异常 线程系统编程接口 线程创建及终止 线程等待 使用线程系统接口封装一个小型的C线程库并实现一个抢票逻辑 线程互斥 互斥量的接口 线程互斥实现原理 使用系统加锁接口封装LockGuard 实现自动化加锁 线程安全和可重入函数 …

Win10文件夹共享(有密码的安全共享)(SMB协议共享)

前言 局域网内(无安全问题,比如自己家里wifi)无密码访问,参考之前的操作视频 【电脑文件全平台共享、播放器推荐】手机、电视、平板播放硬盘中的音、视频资源 下面讲解公共网络如办公室网络、咖啡厅网络等等环境下带密码的安全…

探寻马来西亚服务器托管的优势与魅力

随着全球跨境业务的不断增加,境外服务器成为越来越受欢迎的选择。在这其中,马来西亚服务器备受关注,其机房通常位于马来西亚首都吉隆坡。对于客户群体主要分布在东南亚、澳大利亚和新西兰等地区的用户来说,马来西亚服务器是一个理…

【opencv】教程代码 —ml (主成分分析、支持向量机、非线性支持向量机)

1. introduction_to_pca.cpp 主成分分析 /*** file introduction_to_pca.cpp* brief 这个程序演示了如何使用OpenCV PCA 提取物体的方向* author OpenCV团队*/// 包含OpenCV函数库所需要的头文件 #include "opencv2/core.hpp" #include "opencv2/imgproc.hpp&q…

JVM专题——内存结构

本文部分内容节选自Java Guide和《深入理解Java虚拟机》, Java Guide地址: https://javaguide.cn/java/jvm/memory-area.html 🚀 基础(上) → 🚀 基础(中) → 🚀基础(下)…

Neo4j数据库(一)

目录 新建节点 Neo4j CQL创建具有属性的节点 多个标签到节点 单个标签到关系 MATCH命令 RETURN命令: Neo4j CQL - MATCH & RETURN匹配和返回 总结:本文介绍了Neo4j的CREATE,MATCH,RETURN的基本操作 新建节点 Neo4j创建一…

Coursera上托福专项课程02:TOEFL Speaking and Writing Sections Skills Mastery 学习笔记

TOEFL Speaking and Writing Sections Skills Mastery Course Certificate 本文是学习 https://www.coursera.org/learn/toefl-speaking-writing-sections-skills-mastery 这门课的学习笔记,如有侵权,请联系删除。 文章目录 TOEFL Speaking and Writing…

Unity 代码控制播放序列帧动画的实现

在Unity中有些应用场景的动画是通过序列帧实现的。 如下图即为一个英雄攻击的一个动画: 那么如何实现该序列帧动画的播放呢,我们可以通过代码来控制播放。 1、把以上序列帧导入编辑器中,并修改图片属性,如下图所示,其…

三菱上升沿和下降沿

1,上升沿 含义 上升沿是在接通的第一个周期执行。 2,下将沿 断开的第一个周期执行 M0 按下后Y0 亮 M1 松开后Y0灭

Docker 安装 Linux 系统可视化监控 Netdata

docker 安装 netdata 前提准备Docker 两种方式部署 Netdata1、使用 docker run 命令运行 netdata 服务2、使用 docker compose 运行 netdata 服务 Netdata 服务可视化界面Netdata 汉化处理 前提准备 说明:此处使用 windows11 安装的 docker desktop & wsl2/apli…

2. 如何让mybatis-plus的逻辑删除注解@TableLogic临时失效

文章目录 如何让mybatis-plus的逻辑删除注解TableLogic临时失效1. 场景复现1.1 controller代码1.2 service层代码1.3 entity代码 2. 问题分析3. 解决方案3.1 说明3.2 核心代码3.3 service方法对应修改为3.4 运行结果 如何让mybatis-plus的逻辑删除注解TableLogic临时失效 1. 场…

python-基础篇-字符串、列表、元祖、字典-列表

文章目录 2.3.2列表2.3.2.1列表介绍2.3.2.1.1列表的格式2.3.2.1.2打印列表 2.3.2.2列表的增删改查2.3.2.2.1列表的遍历2.3.2.2.1.1使用for循环2.3.2.2.1.2使用while循环 2.3.2.2.2添加元素("增"append, extend, insert)2.3.2.2.2.1append 2.3.2.2.2.2extend2.3.2.2.2…

路由策略与路由控制之双点双向重发布(OSPF-ISIS)实验

双点双向重发布在路由协议中,特别是在OSPF(开放式最短路径优先)与IS-IS(中间系统到中间系统)等协议之间,指的是在两个协议间或者两个进程间进行路由信息共享的机制。这种机制涉及到在两个不同的协议区域使用…