Fdog系列(四):使用Qt框架模仿QQ实现登录界面,界面篇。

文章目录

  • 一. 前言
  • 二. 正文
    • 1. 创建窗口,添加基本组件
    • 2. 自定义标题,隐藏任务栏标题,实现系统托盘显示
    • 3. 美化主界面,文本框的奇思妙想
    • 4. 实现背景阴影


一. 前言

Fdog系列已写目录:

Fdog系列(一):思来想去,不如写一个聊天软件,那就从仿QQ注册页面开始吧。

Fdog系列(二):html写完注册页面之后怎么办,用java写后台响应呀。

Fdog系列(三):使用腾讯云短信接口发送短信,数据库写入,部署到服务器,web收尾篇。


哈喽,我的小伙伴们,在之前的三篇中,我们实现了网页端注册一个Fdog账号,包括第一篇html的设计,第二篇,html页面的响应,以及第三篇的发送短信,数据库写入等等,关于网页端的编写,用了三篇进行描述,从第四篇开始,将进入Qt阶段,我将开始使用Qt继续进一步创造,带领大家将一些知识进行综合。

先看一下效果图
在这里插入图片描述
所有文章源码已整体打包上传至github,求星星!

学习该篇,你将学会:

自定义标题框,实现移动
隐藏任务栏图标,将图标显示在系统托盘(系统右下角)
创建右击菜单
文本框的奇思妙想
自定义边框如何添加边框阴影效果
样式设计
等等等等

图中的下拉框,以及如何获取内容,改变内容,删除内容,将在第五篇功能篇为大家讲解,还包括获取本地登录信息,识别用户是否记住密码,以及ListWdiget自定义,关注我不迷路!

那么下面我们就开搞吧!go!


二. 正文

1. 创建窗口,添加基本组件

首先创建一个Widget窗口,不要创建MainWindow窗口,因为MainWindow窗口将作为我们后面主界面的窗口。

右键项目,添加新文件,选中Qt下面的Qt设计师界面类,选择创建widget类型的窗口。

然后照猫画虎,模仿QQ添加必要的控件。
在这里插入图片描述
包括几个标签,按钮,以及文本框。

你可以看到文本框下面的三个控件中右边那个貌似不是很对齐,怎么做呢,给他们三加一个水平布局就可以解决问题,你可能会说使用XY值也可以条件,好吧,随便你。

我们拉一个水平布局,将这三个控件拉进去,效果如下:

在这里插入图片描述

小提示:

如果你想让某个控件特别的长,或特别的短,可以试试设置他们的最大值最小值,如果控件,例如按钮,在水平控件中宽会缩放自如,而高则不然,原因是什么呢?你可以点击按钮,选中属性页面的sizepolicy,你可以看到水平策略和垂直策略两者值的不同,这就是其中的原因,以及垂直伸展属性,适当的设置这些属性,将有助于你设计出更好的界面。

现在,我们点击运行,效果如下:
在这里插入图片描述


2. 自定义标题,隐藏任务栏标题,实现系统托盘显示

现在我们将系统自动的标题隐藏掉,使用我们自定义的标题,在这之前,我们先把最小化,关闭按钮实现,虽然可以直接切后台~~~

同样使用到水平布局,将最小化,最大化按钮(ToolButton)和左侧的绿色标签放在水平布局中,如果在布局中两个控件需要间隔一定距离,可以使用弹簧进行间隔。

在这里插入图片描述
右击最小按钮和关闭按钮,转到槽,选择选中(clicked())信号。

void Login::on_toolButton_clicked()//最小化
{this->hide();
}void Login::on_toolButton_2_clicked()//关闭
{this->close();
}

并为按钮添加图标,以及左上角的标签添加logo图片,运行效果如下(黑色效果不明显,我换了一个):
在这里插入图片描述
如果你给按钮添加了图标,但是是像关闭按钮那样后面有白色的话,可以选中按钮属性中的autoRaise,勾选一下,你就会发现背景透明了。

如果你不会添加资源的话,我教你呀,右击项目,创建新文件,选中Qt中的Qt Resources文件,创建之后工程列表会多出一个Resources文件,然后在项目文件夹下面创建一个lib的文件夹,图片放在里面,然后点击Resources,添加现有文件,选择lib下面的图片即可。

差了忘了最主要的,如何取消系统标题,在构造函数中,为窗体设置Flags。

this->setWindowFlags(Qt::SplashScreen|Qt::WindowStaysOnTopHint|Qt::FramelessWindowHint);

运行看看
在这里插入图片描述
你会发现没有了系统标题,但是这里有一个很大的问题,你发没发现它根本移动不了????

我们来解决它。

添加两个头文件

#include<QPoint>
#include<QMouseEvent>

在头文件中添加三个函数和两个变量。

	bool isPressedWidget;QPoint last;void mousePressEvent(QMouseEvent *event);//鼠标点击void mouseMoveEvent(QMouseEvent *event);//鼠标移动void mouseReleaseEvent(QMouseEvent *event);//鼠标释放

并对其进行实现

void Login::mousePressEvent(QMouseEvent *event)
{isPressedWidget = true; // 当前鼠标按下的即是QWidget而非界面上布局的其它控件last = event->globalPos();
}void Login::mouseMoveEvent(QMouseEvent *event)
{if (isPressedWidget){int dx = event->globalX() - last.x();int dy = event->globalY() - last.y();last = event->globalPos();move(x()+dx, y()+dy);}
}void Login::mouseReleaseEvent(QMouseEvent *event)
{int dx = event->globalX() - last.x();int dy = event->globalY() - last.y();move(x()+dx, y()+dy);isPressedWidget = false; // 鼠标松开时,置为false
}

这里还有我之前发的一篇对于鼠标移动有另一种写法:Qt隐藏系统标题栏,使用自定义标题栏

运行效果如下:
在这里插入图片描述

除此之外任务栏也不显示程序标题,这正是我们想要的,现在我们为这个窗口添加系统托盘,和QQ一样,我们将在系统托盘对其操作。

QSystemTrayIcon类可以帮助我们完成这一操作。

在头文件创建一个QSystemTrayIcon类对象

 QSystemTrayIcon  * systemtrayicon;  //系统托盘

cpp文件中对其实例化

//初始化系统托盘systemtrayicon = new QSystemTrayIcon(this);QIcon icon = QIcon(":/lib/qusefdogicon.png");//添加图标systemtrayicon->setIcon(icon);//当鼠标悬浮,显示文字systemtrayicon->setToolTip(QObject::trUtf8("Fdog"));//显示图标systemtrayicon->show();

在这里插入图片描述

唯一不足的是qq有右击菜单,我们没有,现在我们来试着添加右击菜单,并实现打开主界面和退出功能。

创建一个菜单对象,两个action,两个槽函数

#inlcude<QMenu>
QMenu * menu;
QAction *m_pShowAction;
QAction *m_pCloseAction;
private slots:
void showwidget();
void closewidget();

对其实例化

menu = new QMenu(this);
m_pShowAction = new QAction("打开主界面");
m_pCloseAction = new QAction("退出");
menu->addAction(m_pShowAction);
menu->addSeparator();
menu->addAction(m_pCloseAction);
systemtrayicon->setContextMenu(menu);
connect(m_pShowAction,SIGNAL(triggered(bool)),this,SLOT(showwidget()));
connect(m_pCloseAction,SIGNAL(triggered(bool)),this,SLOT(closewidget()));void Login::showwidget()
{this->show();
}void Login::closewidget()
{this->close();
}

效果如下,右击,可以选择打开主界面或者是退出。
在这里插入图片描述


3. 美化主界面,文本框的奇思妙想

在这里插入图片描述
现在,我们着重对样式进行一个美化,让它从左边的图向右边靠拢。

比如上半部分的一个动态图,怎么显示动态图呢

#include<QMovie>
QMovie * m_movie;
//加载动态图
m_movie = new QMovie(":/lib/mian.gif");//这是需要播放的动态图
//设置动态图大小
m_si.setWidth(431);
m_si.setHeight(151);
m_movie->setScaledSize(m_si);
//添加动态图
ui->mian_label->setMovie(m_movie); //mian_label是粉色的标签
//开始动画
m_movie->start();

将头像设置为圆形需要设置qss,也就是样式表,可以右击label为头像的改变样式表添加如下语句

border-image: url(:/lib/icon2505897252.png);
border-width:0px;
border-radius:33px;
border-style:solid;
border-color: rgb(255, 255, 255);

包括头像后面的白框也是同样的方法。

然后关于注册帐户,以及自动登录,记住密码等标签或是按钮等等,可以设置普通状态和鼠标悬浮状态,文字颜色深浅的一个不同。
这里就拿按钮举例,设置其qss,:hover代表鼠标悬浮。

#pushButton_2{
color: rgb(149, 149, 149);
}
#pushButton_2:hover{
color: rgb(120, 120, 120);
}

登录按钮的qss美化

#pushButton{
background-color: rgb(99, 188, 255);
color: rgb(255, 255, 255);
border-radius: 5px;
font-size:14px;
}
#pushButton:hover{
background-color: rgb(99, 170, 255);
color: rgb(255, 255, 255);
border-radius: 5px;}
#pushButton:pressed{
background-color: rgb(99, 188, 255);
color: rgb(255, 255, 255);
border-radius: 5px;
padding-left:2px;
padding-top:2px;
}

默认的按钮,当我们点击按钮时,按钮上的文字会向右上角晃动,但是当我们添加了自定义的图片,该效果则消失,如何做到这一点,可以使用padding-left:2px; padding-top:2px;来实现。

下面是一个主要的点,文本框的奇思妙想。
在这里插入图片描述

1.如何添加默认文本,文本框属性中找placeholderText设置即可。

2.如何在文本框添加图标,包括左边和右边

//Fdog号码文本框
QAction * searchAction = new QAction(ui->lineEdit);
searchAction->setIcon(QIcon(":/lib/suo.png"));
ui->lineEdit->addAction(searchAction,QLineEdit::LeadingPosition);//表示action所在方位(左侧)。
//密码文本框
QAction * searchAction_2 = new QAction(ui->lineEdit);
searchAction_2->setIcon(QIcon(":/lib/jianpan.png"));
ui->lineEdit->addAction(searchAction_2,QLineEdit::TrailingPosition);//表示action所在方位(右侧)。
QAction * searchAction_3 = new QAction(ui->lineEdit);
searchAction_3->setIcon(QIcon(":/lib/fdog.png"));
ui->lineEdit_2->addAction(searchAction_3,QLineEdit::LeadingPosition);//表示action所在方位(左侧)。

3.如何实现右边下拉选项框,其实这里是一个文本框和一个combox下拉列表框组成的

在这里插入图片描述
点击三角按钮,将选中的内容显示在文本框就可以了。

这个三角好像有点丑,我们可以给它一个替换

::down-arrow{
border-image: url(:/lib/jietou.png);
}

如果不清楚一个控件有哪些子控件,可以看这篇子控件查阅。

之后就是将文本框左右两边以及上面的边改为白色或透明,下边改成黑色,大功告成。

border-style:solid;
border-width:1px;
border-top-color: rgba(255, 255, 255, 0);
border-right-color: rgba(255, 255, 255, 0);
border-left-color: rgba(255, 255, 255, 0);
border-bottom-color: rgb(129, 129, 129);

4. 实现背景阴影

到目前为止,还剩下最后一个问题,当使用自带的标题栏后,窗口是自带阴影边框的,但是当我们取消了系统自带的标题栏之后,边框也随之消失,如何自己搞一个边框阴影?我来教你,首先准备一张边框阴影图,没有?别担心,狗子我是全能的,PS走起,好歹我也是负责学生会海报的优秀人才。

创建一个透明图层,然后再创建一个白色图层,边框要小于透明图层,给白色图层设置图层样式,投影里面,参数如下:
在这里插入图片描述
在这里插入图片描述
后面放了一个白色背景方便观察。然后保存为png图,记得把后面白色图层隐藏,再说一遍要注意透明图层和阴影图层的距离,
在这里插入图片描述
会到qt,拖一个widget,然后把除了顶层窗口所有我们自己创建的控件都拖进去,然后设置最小大小和最大大小,然后给顶层窗口一个布局。并且设置适当边距,如图中蓝色区域,这个蓝色区域就是放阴影的地方。
在这里插入图片描述
然后设置窗体透明

    //窗体透明setAttribute(Qt::WA_TranslucentBackground);

重写void paintEvent(QPaintEvent *e);

void paintEvent(QPaintEvent *e);void Login::paintEvent(QPaintEvent *e)
{Q_UNUSED(e)QPainter painter(this);QPixmap pixmap(":/lib/background.png");//做好的图qDrawBorderPixmap(&painter, this->rect(), QMargins(0, 0, 0, 0), pixmap);QRect rect(this->rect().x()+8, this->rect().y()+8, this->rect().width()-16, this->rect().height()-16);painter.fillRect(rect, QColor(255, 255, 255));
}

在这里插入图片描述


在这里插入图片描述
最后再放一张美图,我知道大家好这口【手动狗头】,看了我的美图,还不赶紧点个赞,给个关注?

源码还有图片资源想要的话,可以在评论区留个邮箱,也可以加我微信获取sui2506897252。


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

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

相关文章

Qt之对话框(QDialog)

文章目录 一、对话框的概念二、与QWidget的区别三、对话框2种显示方法四、对话框返回值的概念本节示例 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、对话框的概念 对话框是和用户简短交互的一种窗口。如&#xff1a;登录界面&#xff0c;关于界…

《爱情公寓》电影,让我十年的情怀,一瞬间都喂了狗

点击上方“程序人生”&#xff0c;选择“置顶公众号” 第一时间关注程序猿&#xff08;媛&#xff09;身边的故事 作者 丁彦军 来源 恋习Python 如需转载&#xff0c;请联系原作者授权。 深陷抄袭之名、诉讼纠纷的《爱情公寓》终于上映了。 情怀粉们的力量不容小觑&#xff0c;…

长坡厚雪 一个智能手机的“大时代”迎面到来

作者 | 曾响铃 文 | 响铃说 “这是一个最好的时代&#xff0c;也是一个最坏的时代。 ” 在世界贸易关系、国际环境等不确定因素影响下&#xff0c;全球都蒙上了一层阴影。前不久召开的2023博鳌亚洲论坛主题就是“在不确定的世界中探寻确定性”&#xff0c;简单来说就是当前社…

《XP、面具框架玩机》小米手机玩机教程--菜鸟小回

《框架玩机》小米手机玩机教程 ChatGPT点击直接对话&#xff1a;小回公益GPT 注&#xff1a;刷机有风险&#xff0c;玩机需谨慎。 操作不当所造成后果与菜鸟小回无关&#xff01;&#xff01;&#xff01; 今天来分享小米手机玩机技巧&#xff0c;Magisk面具Xp框架! 可能你多上…

工程质量之研发过程管理需要关注的点

一、背景 作为程序猿&#xff0c;工程质量是我们逃不开的一个话题&#xff0c;工程质量高带来的好处多多&#xff0c;我在写这篇文章的时候问了一下CHATGPT&#xff0c;就当娱乐一下&#xff0c;以下是ChatGPT的回答&#xff1a; 1、提高产品或服务的可靠性和稳定性。高质量的系…

港联证券|存储概念再活跃,佰维存储盘中逼近涨停再创新高

存储概念11日盘中再度走强&#xff0c;截至发稿&#xff0c;佰维存储涨超19%&#xff0c;盘中迫临涨停再创上市以来新高&#xff0c;该股自上市以来累计大涨超500%&#xff1b;江波龙涨近15%盘中亦创出新高&#xff1b;此外&#xff0c;朗科科技涨近12%&#xff0c;同有科技涨近…

比尔盖茨:Web3没那么重要,元宇宙没革命性,人工智能最重要

1. 【比尔盖茨&#xff1a;Web3没那么重要&#xff0c;元宇宙没革命性&#xff0c;人工智能最重要】 微软联合创始人比尔•盖茨似乎与特斯拉CEO埃隆马斯克一样对元宇宙、Web3&#xff08;第三代互联网&#xff09;毫无兴趣。 当地时间1月12日&#xff0c;比尔•盖茨在美国社交新…

死磕数据库系列(二十二):MySQL 数据库机房架构与跨城容灾

点关注公众号&#xff0c;回复“1024”获取2TB学习资源&#xff01; 今天我将详细的为大家介绍 MySQL 数据库的机房架构与跨城容灾相关知识&#xff0c;希望大家能够从中收获多多&#xff01;如有帮助&#xff0c;请点在看、转发支持一波&#xff01;&#xff01;&#xff01; …

AI人工智能与机器人的探索和应用1.2

原文&#xff1a;https://mp.weixin.qq.com/s/Fpku8e1mvU1M7hOMV8rSnA chatgpt的火爆使用让人工智能掀起了新一轮的话题革命。当前的全球情况数据显示&#xff0c;人工智能、机器学习和机器人技术等创新产品几乎每个领域都普遍流行&#xff0c;无论是农业、医疗保健、教育、还…

一场云端的“神仙打架”:BAT加华为的影响未来之争

作者&#xff5c;震霆 出品&#xff5c;新芒X 公众号&#xff5c;GOwithAI Up in the Air &#xff01; 这是2009年上映的一部经典的电影名称&#xff0c;翻译成中文叫《在云端》&#xff0c;想必有不少人看过。 男主角因为工作性质成为空中飞人&#xff0c;穿梭在云…

全网最流氓还擦边的App,被华为封杀了!

&#x1f447;&#x1f447;关注后回复 “进群” &#xff0c;拉你进程序员交流群&#x1f447;&#x1f447; 来源丨程序员软件库 https://mp.weixin.qq.com/s/WFqu1mYYIiq8A-XNJgMA5Q ‍ 很多人下载APP&#xff0c;一般是用手机自带的应用商店&#xff0c;下载安装一条龙&…

华为推出打车平台 Petal,科技大厂再战聚合打车

作者|小满 声明|题图来源于网络。惊蛰研究所原创文章&#xff0c;文章转载自「惊蛰研究所」公众号。 沉寂许久的网约车市场&#xff0c;因为科技巨头的集体入局再次成为焦点。 7月27日&#xff0c;华为正式宣布上线聚合打车平台Petal出行&#xff0c;包括此前在微信内测打车服务…

腾讯VS华为:2021“渠道战争”第一枪

本文转载自 刺猬公社&#xff0c;作者 陈彬 2021年方才来临一个小时&#xff0c;华为与腾讯两大巨头就打了起来。 华为应用商店发布公告&#xff0c;宣布下架所有腾讯游戏&#xff0c;原因是“腾讯单方面就双方合作做出重大变更”。腾讯方很快做出回应&#xff0c;表明未能与华…

如果你还不知道什么是华为ICT大赛,你就OUT了!

&#xff08;小灰想象中的比赛现场&#xff09; ICT&#xff0c;全称Information Communications Technology。 华为ICT大赛是华为打造的面向全球大学生的年度例行ICT赛事&#xff0c;为华为ICT学院和有意愿成为ICT学院的高效学生提供国际化竞技和交流平台&#xff0c;增长学生…

华为内部推荐,比惨大会 (转载)

发信人: lansheng228 (大宅男), 信区: Joke 标 题: Re: 华为内部推荐&#xff0c;比惨大会 (转载) 发信站: 水木社区 (Thu Jul 17 18:50:26 2014), 站内 【 以下文字转载自 WorkLife 讨论区 】 发信人: diviner (diviner), 信区: WorkLife 标 题: Re: 华为内部推荐&#xf…

Tubi 快讯|中国团队 100 人啦

Tubi 中国团队 100 人啦 上周五&#xff0c;Tubi 迎来了中国团队的第 100 位同事&#xff01; 从最开始创立到 Tubi 中国团队第一次在公众号亮相&#xff0c;再到去年年底的关于 Tubi &#xff0c;你想知道的都在这里&#xff0c;Tubi 一路成长也一路收获&#xff0c;始终未变…

独家!华为、腾讯齐聚香港,一起密谋着什么?

4月17日&#xff0c;“TokenSky香港站 第16届TFC全球泛游戏大会”上主题为“游戏出海与未来链游之路”在香港科学园成功举办&#xff0c;现场座无虚席&#xff0c;全球游戏游戏研发商、发行商、渠道商、第三方等齐聚主会场&#xff0c;现场嘉宾就区块链游戏发展、游戏出海及变现…

第一波IT去美国化的公司不是华为

第一波去美国化的不是华为&#xff0c;是BAT京东等 互联网类公司发起的工程叫&#xff1a;去IOE IBM小型机&#xff0c;ORACLE数据库&#xff0c;EMC存储 几年前已经完成了技术去美化 趣讲大白话&#xff1a;安全是底线 【趣讲信息科技174期】 **************************** 第…

华为公布新运营商BG总裁/ 苏州超算中心顶楼起火/ 马斯克卖香水赚700万…今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大家好&#xff0c;今天是10月13日星期四&#xff0c;v我50&#xff08;手动狗头&#xff09;。 科技圈有哪些新鲜事&#xff0c;快来和日报君一起看看吧&#xff5e; 微软将推免费设计软件 当地时间周三&#xff0c;美国微软宣布将推…

马斯克最新深度采访:我一年只休三天,7000字聊透九大热点

马斯克在股东会上没说的内容&#xff0c;都在这场采访里了。 继马斯克被股东提案列为“风险人物”&#xff0c;特斯拉5月份股东大会被批“啥都没有”&#xff0c;甚至是“投资者日剧本重刷”后&#xff0c;马斯克终于对这次“遮遮掩掩”的股东大会进行回应了。 日前&#xff…