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

news/2024/5/19 15:14:40/文章来源:https://blog.csdn.net/LF__plus/article/details/137400236

往期回顾:

【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//实现点击最下面图标就最小化,再次点击就最大化WindowMinMaxButtonsHintthis->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.luyixian.cn/news_show_1045288.aspx

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

相关文章

vmware 一打开虚拟机就蓝屏重启

按照正常步骤安装完镜像后,点击 开启此虚拟机 ,直接出现下图所示蓝屏,然后重启。 解决的办法是通过修改 启用或关闭windows功能 里的选项,如下图,勾选上 Windows虚拟机监控程序平台 和 虚拟机平台 两项。然后重启电脑…

超越常规:用PHP抓取招聘信息

在人力资源管理方面,有效的数据采集可以为公司提供宝贵的人才洞察。通过分析招聘网站上的职位信息,人力资源专员可以了解市场上的人才供给情况,以及不同行业和职位的竞争状况。这样的数据分析有助于企业制定更加精准的招聘策略,从…

工厂水表计量监测管理系统

在工业生产中,水资源作为重要的生产要素之一,其使用效率直接关系到企业的生产成本和环境保护。因此,对工厂的水使用进行精确的计量与监测是至关重要的。工厂水表计量监测管理系统正是在这样的背景下应运而生,它融合了信息技术与自…

书生·浦语大模型实战营(第二期):书生·浦语大模型趣味Demo

目录 部署InternLM2-Chat-1.8B模型进行对话环境配置下载InternLM2-Chat-1.8B模型运行cli_demo基础作业:使用 InternLM2-Chat-1.8B 模型生成 300 字的小故事(需截图) 部署实战营优秀作品 八戒-Chat-1.8B 模型下载运行Chat-八戒 Demo 使用 Lage…

多维 HighCharts

1&#xff1a;showHighChart.html <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><!-- js脚本都是官方的,后两个是highchart脚本 --><script type"text/javascript" src"jquery1.7.1.mi…

电商大数据采集|电商API接口|自动化采集|人工采集

大数据采集是指从海量、异构、分散、动态的网络环境中收集、提取和存储数据的过程。大数据采集主要分为两种方式&#xff1a;自动化采集和人工采集。 1.自动化采集 电商API自动化采集是利用爬虫技术和API等方式&#xff0c;通过编写程序实现对网站或者应用程序中的数据进行自…

轻量级web开发框架:Flask本地部署及实现公网访问界面

目录 前言 1. 安装部署Flask 2. 安装Cpolar内网穿透 3. 配置Flask的web界面公网访问地址 4. 公网远程访问Flask的web界面 前言 本篇文章讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网上并进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采…

用html写早安,晚安动画

<!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>早安、晚安动画</title><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.c…

赛氪网|2024中国翻译协会年会“AI科技时代竞赛与就业”分论坛

在2024年中国翻译协会年会期间&#xff0c;赛氪网与中西部翻译协会共同体多边合作平台共同承办&#xff0c;于3月30日下午在长沙成功举办了“AI科技时代竞赛与就业分论坛”。该论坛汇聚了众多翻译界、科技界和教育界的专家学者&#xff0c;共同探讨科技、实践、就业与竞赛人才培…

uni-app项目创建方式

原生小程序与uni-app的区别 创建uni-app的方式 1.通过HBuilderX创建 2.通过命令行创建 vue3ts版&#xff1a;npx degit dcloudio/uni-preset-vue#vite-ts 项目名称 用vscode开发uni-app项目 安装命令&#xff1a;npm i -D types/wechat-miniprogram uni-helper/uni-app-typ…

自动驾驶硬件-GNSS

自动驾驶硬件-GNSS 高精度全局定位系统本质上可以看做一个级联的定位系统&#xff0c;先通过GNSS系统提供一个可能的位置范围&#xff0c;再利用激光雷达(Lidar)系统、视觉定位系统等方法进行局部环境的搜索匹配&#xff0c;从而实现厘米级的定位精度。由于需要由GNSS为高精度…

JR-SMD201网络直播解码器

详细介绍&#xff1a; JR-SMD201网络直播解码器&#xff0c;支持AVS/H.265/H.264/MPEG2解码&#xff0c;支持IP输入&#xff0c;支持1080P/1080I/720P/576I/480I多种分辨率&#xff0c;支持DRA/AC3/EAC3/AAC/MPEG等音频。 产品特点 支持多种输入方式IP 接口丰富&#xff0c;CV…

docker-ce部署

目录 1. 更新软件包列表 2. 安装必要的软件包&#xff0c;以允许 apt 使用 HTTPS 3. 添加 Docker 的官方 GPG 密钥 4. 设置 Docker CE 的稳定存储库 5. 再次更新包索引以及安装 Docker CE 6. 验证 Docker CE 是否正确安装 7. 将当前用户添加到 docker 用户组&#xff0c;…

FreeGPT3.5 开源软件

GPT-3.5不需要付费&#xff0c;也不需要注册用户&#xff0c;可以直接使用了&#xff0c;官方彻底开放了API接口。 该API政策一放开&#xff0c;GitHub很快就已经出现了一个开源项目FreeGPT35&#xff0c;可以自动生成key调用GPT3.5的API接口&#xff0c;再也用不着注册账号和申…

C#使用Selenium驱动Chrome浏览器

1.Selenium库依赖安装 Selenium WebDriver是Selenium项目的一部分&#xff0c;用于模拟用户在Web应用程序中的交互操作。它支持多种浏览器&#xff0c;如Chrome、Firefox、IE等&#xff0c;且与各种编程语言&#xff08;如Java、Python、C#等&#xff09;兼容&#xff0c;具有…

Python实现读取dxf文件的所有字符

Python实现读取dxf文件的所有字符 import ezdxfdef read_dxf_and_print_text(filename):# 加载DXF文件doc ezdxf.readfile(filename)# 遍历所有的实体for entity in doc.entities:# 检查实体是否是TEXT、MTEXT或DIMENSIONif isinstance(entity, ezdxf.entities.Text):print(f…

如何做好产业园运营?树莓集团:响应政府号召,规划,注重大局观

随着经济的发展和产业结构的调整&#xff0c;产业园区的建设和发展已经成为推动地方经济的重要力量。如何做好产业园运营&#xff0c;提高行业竞争力&#xff0c;现已成为了一个亟待解决的问题。树莓集团作为一家有着丰富产业园运营经验的企业&#xff0c;积极响应政府号召&…

蓝桥杯算法题:练功

【问题描述】 小明每天都要练功&#xff0c;练功中的重要一项是梅花桩。 小明练功的梅花桩排列成 n 行 m 列&#xff0c;相邻两行的距离为 1&#xff0c;相邻两列的距离也为 1。 小明站在第 1 行第 1 列上&#xff0c;他要走到第 n 行第 m 列上。小明已经练了一段时间&#xff…

8.Java常用类

文章目录 1. String1.1 String的特性1.2 String对象创建1.2.1 字符串的特性1.2.2 intern()1.2.3 String使用细节 1.3 String常用方法1.4 String类型转换1.4.1 String与包装类1.4.2 String与char[]数组1.4.3 String与Byte[]数组 2. StringBuffer与StringBuilder2.1 字符串构造器…

uniapp微信小程序中的地图

uniapp的文档中&#xff0c; 一个是地图api 一个是地图的 map 组件&#xff0c;两个有些地方是相通的&#xff0c;不好区分 区分一下&#xff0c;api 是通过 方法调起显示地图 比如我们常用的 查看位置的 api uni.openLocation() 这个api 的参数 一这是 number 不然无效 uni.op…