#一、简述
今天晚上花了半天时间从QQ登录界面抠了些图,顺便加了点样式基本上实现了QQ的登陆界面全部效果。虽不说100%相似,那也有99.99%相似了哈O(∩_∩)O。

QQ好像从去年开始,登录界面有了一个3D动态效果,要实现这个也不难,直接使用GIF制作工具,录制动态效果生成GIF图,然后用QMovie加载Gif图,QLabel显示即可。

###效果图:

可以从上面的效果图看出,整个登录界面的效果都已实现(或者说点击状态按钮没有弹出菜单选择登录状态,这个我觉得是功能部分,此篇只谈界面效果,在下篇中将实现界面上的一些功能。)

好了看完效果上代码。

#二、代码之路

代码中用到了 Qt 之 自定义窗口标题栏 中叙述的自定义标题栏,直接继承了BaseWindow类,略去了一定的代码。有需要的小伙伴可以看一下。

###LoginWindow.h

#include "basewindow.h"namespace Ui {class LoginWindow;
}// 登录状态;
typedef enum
{ONLINE = 1,     //在线;ACTIVE,          //活跃;AWAY,           //离开;BUSY,           //忙碌;NOT_DISTURB, //请勿打扰; HIDE,           //隐身;OFFLINE            //离线;
}LoginState;class LoginWindow : public BaseWindow
{Q_OBJECTpublic:LoginWindow(QWidget *parent = 0);~LoginWindow();private:void initMyTitle() ;void initWindow();private:Ui::LoginWindow *ui;// 密码框小键盘按钮;QPushButton* m_keyboardButton;};

###LoginWindow.cpp

#include "LoginWindow.h"
#include "ui_LoginWindow.h"
#include "accountitem.h"
#include <QPainter>
#include <QMovie>
#include <QHBoxLayout>
#include <QCursor>LoginWindow::LoginWindow(QWidget *parent): BaseWindow(parent), ui(new Ui::LoginWindow)
{ui->setupUi(this);initWindow();initMyTitle();this->loadStyleSheet(":/Resources/LoginWindow/LoginWindow.css");
}LoginWindow::~LoginWindow()
{delete ui;
}void LoginWindow::initMyTitle()
{// 因为这里有控件层叠了,所以要注意控件raise()方法的调用顺序;m_titleBar->move(0, 0);m_titleBar->raise();m_titleBar->setBackgroundColor(0, 0, 0 , true);m_titleBar->setButtonType(MIN_BUTTON);m_titleBar->setTitleWidth(this->width());ui->pButtonArrow->raise();
}void LoginWindow::initWindow()
{//背景GIG图;QLabel* pBack = new QLabel(this);QMovie *movie = new QMovie();movie->setFileName(":/Resources/LoginWindow/back.gif");pBack->setMovie(movie);movie->start();pBack->move(0, 0);//暗注释;ui->accountComboBox->setEditable(true);QLineEdit* lineEdit = ui->accountComboBox->lineEdit();lineEdit->setPlaceholderText(QStringLiteral("QQ号码/手机/邮箱"));ui->passwordEdit->setPlaceholderText(QStringLiteral("密码"));// 密码框中的小键盘按钮;m_keyboardButton = new QPushButton();m_keyboardButton->setObjectName("pButtonKeyboard");m_keyboardButton->setFixedSize(QSize(16, 16));m_keyboardButton->setCursor(QCursor(Qt::PointingHandCursor));QHBoxLayout* passwordEditLayout = new QHBoxLayout();passwordEditLayout->addStretch();passwordEditLayout->addWidget(m_keyboardButton);passwordEditLayout->setSpacing(0);passwordEditLayout->setContentsMargins(0, 0, 8, 0);ui->passwordEdit->setLayout(passwordEditLayout);ui->passwordEdit->setTextMargins(0, 0, m_keyboardButton->width() + 12, 0);ui->userHead->setPixmap(QPixmap(":/Resources/LoginWindow/HeadImage.png"));ui->loginState->setIcon(QIcon(":/Resources/LoginWindow/LoginState/state_online.png"));ui->loginState->setIconSize(QSize(13, 13));
}

###样式

*{font-family:Microsoft YaHei;}/*最小化按钮*/
QPushButton#pButtonArrow
{border-image:url(:/Resources/LoginWindow/arrowback.png) 0 60 0 0 ;
}QPushButton#pButtonArrow:hover
{border-image:url(:/Resources/LoginWindow/arrowback.png) 0 30 0 30 ;
}QPushButton#pButtonArrow:pressed
{border-image:url(:/Resources/LoginWindow/arrowback.png) 0 0 0 60 ;
}/*注册账号*/
QPushButton#pButtonRegistAccount
{color:rgb(38 , 133 , 227);background-color:transparent;
}QPushButton#pButtonRegistAccount:hover
{color:rgb(97 , 179 , 246);
}QPushButton#pButtonRegistAccount:pressed
{color:rgb(0 , 109 , 176);
}/*忘记密码*/
QPushButton#pButtonForgetPassword
{color:rgb(38 , 133 , 227);background-color:transparent;
}QPushButton#pButtonForgetPassword:hover
{color:rgb(97 , 179 , 246);
}QPushButton#pButtonForgetPassword:pressed
{color:rgb(0 , 109 , 176);
}/*下拉列表框*/
QComboBox
{background:white;padding-left:5px ;border-top-left-radius:3px;border-top-right-radius:3px;border: 1px solid rgb(209 , 209 , 209);
}
QComboBox:hover
{border: 1px solid rgb(21 , 131 , 221);
}
QComboBox QAbstractItemView::item
{height:40px;
}
QComboBox::down-arrow
{border-image:url(:/Resources/LoginWindow/drop_down_Button.png) 0 34 0 0 ;
}
QComboBox::down-arrow:hover
{border-image:url(:/Resources/LoginWindow/drop_down_Button.png) 0 17 0 17 ;
}
QComboBox::down-arrow:on
{border-image:url(:/Resources/LoginWindow/drop_down_Button.png) 0 0 0 34 ;
}
QComboBox::drop-down
{width:20px;background:transparent; /*不加此句下拉箭头背景色为灰色与整体样式不一致,也可设置 border:0px; border-radius:0px; background:white; border-left:0px ; 即设置为无边框*/padding-right:5px;
}/*密码框*/
QLineEdit#passwordEdit
{background:white;padding-left:5px ;padding-top:1px ;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border: 1px solid rgb(209 , 209 , 209);border-top:transparent;
}
QLineEdit#passwordEdit:hover
{padding-top:0px ;border: 1px solid rgb(21 , 131 , 221);
}/*密码框中的小键盘按钮*/
QPushButton#pButtonKeyboard
{border-image:url(:/Resources/LoginWindow/keyboard.png) 0 30 0 0 ;
}QPushButton#pButtonKeyboard:hover
{border-image:url(:/Resources/LoginWindow/keyboard.png) 0 15 0 15 ;
}QPushButton#pButtonKeyboard:pressed
{border-image:url(:/Resources/LoginWindow/keyboard.png) 0 0 0 30 ;
}/*记住密码and自动登录*/
QCheckBox
{color:rgb(101 , 101 , 101);
}QCheckBox::indicator:unchecked
{border-image:url(:/Resources/LoginWindow/checkbox.png) 0 39 0 0;
}
QCheckBox::indicator:hover
{border-image:url(:/Resources/LoginWindow/checkbox.png) 0 26 0 13;
}
QCheckBox::indicator:pressed
{border-image:url(:/Resources/LoginWindow/checkbox.png) 0 13 0 26;
}
QCheckBox::indicator:checked
{border-image:url(:/Resources/LoginWindow/checkbox.png) 0 0 0 39;
}/*多账号登录*/
QPushButton#moreAccountLogin
{border-image:url(:/Resources/LoginWindow/more_accountlogin.png) 1 47 1 1;    /*1是由于图片保存问题图片大了两个像素*/
}QPushButton#moreAccountLogin:hover
{border-image:url(:/Resources/LoginWindow/more_accountlogin.png) 1 24 1 24;
}QPushButton#moreAccountLogin:pressed
{border-image:url(:/Resources/LoginWindow/more_accountlogin.png) 1 1 1 47;
}/*二维码*/
QPushButton#pButtongFlicker
{border-image:url(:/Resources/LoginWindow/flicker.png) 0 44 0 0;
}QPushButton#pButtongFlicker:hover
{border-image:url(:/Resources/LoginWindow/flicker.png) 0 22 0 22;
}QPushButton#pButtongFlicker:pressed
{border-image:url(:/Resources/LoginWindow/flicker.png) 0 0 0 44;
}/*登陆按钮*/
QPushButton#loginButton
{color:white;background-color:rgb(14 , 150 , 254);border-radius:5px;
}QPushButton#loginButton:hover
{color:white;background-color:rgb(44 , 137 , 255);
}QPushButton#loginButton:pressed
{color:white;background-color:rgb(14 , 135 , 228);padding-left:3px;padding-top:3px;
}/*登录状态*/
QPushButton#loginState
{border-radius:3px;background:transparent;
}QPushButton#loginState:hover
{border: 1px solid rgb(150 , 150 , 150);
}QPushButton#loginState:pressed
{padding-left:2px;padding-top:2px;border: 1px solid rgb(150 , 150 , 150);
}

###界面布局

整个界面布局与QQ登录界面上的各个控件位置、大小保持一致


###资源图片

实现整个界面的样式其实不难,主要是图片资源都是一个一个从QQ登录界面中扣取出来,然后再经过PS修图,花了不少时间。不过整体与QQ的登录界面达到了一致效果(唯一遗憾的是没有边框的阴影效果,后续将会添加)。


#尾

代码很简单,主要靠样式和图片资源,不得不说PS&抠图是门技巧。上述只实现了界面样式,功能将在下篇补上,敬请期待哈!

Good Night !!!


###资源图片下载

QQ 登录界面 各个控件图片资源

###代码下载

Qt 之 模仿 QQ登陆界面

Qt 之 模仿 QQ登陆界面——样式篇相关推荐

  1. Qt 之 模仿 QQ登陆界面——功能篇(一)

    一.简述 今天是2017年第一篇技术文章,12月末事情太多,一直没来得及更新博客.今天继 Qt 之 模仿 QQ登陆界面--样式篇 这一篇 来简单地看一下对登录界面做的一些功能,主要是登录用户下拉列表和 ...

  2. Qt 之 模仿 QQ登陆界面——旋转窗口篇

    #一.简述 今天是新的一年第一篇博客,有大半个月没有更新博客了.我想是时候,打开电脑.拿起键盘.开始在我的代码之路上披荆斩棘,斩杀恶龙. 今天就继续来分享QQ登录界面的那些事.QQ登录界面的标题栏有一 ...

  3. ios swift模仿qq登陆界面,xml布局

    给大家推荐两个学习的地址: 极客学院的视频:http://www.jikexueyuan.com/path/ios/ 一个博客:http://blog.csdn.net/lizhongfu2013/a ...

  4. Qt模仿QQ聊天窗口界面(二)

    Qt模仿QQ聊天窗口界面(二) Qt模仿QQ聊天窗口界面(二) 简述 修改 效果图 后期规划 代码 结尾 简述 在上篇我们已经搭好了QQ聊天窗口的框架,这里在原来的基础上叠加功能,以及优化一些控件. ...

  5. Qt模仿QQ聊天窗口界面(一)

    Qt模仿QQ聊天窗口界面(一) Qt模仿QQ聊天窗口界面(一) 简述 效果图 QQ的聊天窗口 我做的效果图 代码篇 结尾 简述 最近利用业余时间,模仿QQ做了一个聊天窗口界面,功能还不全,准备分几个部 ...

  6. Qt模仿QQ聊天窗口界面(三)

    Qt模仿QQ聊天窗口界面(三)- 截图 Qt模仿QQ聊天窗口界面(三)- 截图 简述 效果图 代码篇 后期规划 结尾 简述 此篇在原来的基础上增加了QQ截图功能.在一个大佬的基础上进行了二次开发. 参 ...

  7. Qt(三)--- 实现QQ登陆界面头像状态栏的功能

    对于QQ登陆界面,可以通过下拉菜单,实现状态的选择,在QQ的头像状态栏需要显示的信息包括:用户的头像以及登陆的状态.这里主要涉及和利用的只是是QMenu以及QAction,同时继承QLabel的类: ...

  8. Qt之模仿QQ主面板界面

    Qt之模仿QQ主面板界面 Qt之模仿QQ主面板界面 效果图 结尾 效果图 这里大家值得注意的是,QQ等级设置,已经列表展开搜索时的三角符的旋转效果 //QQMainWindow.cpp #includ ...

  9. android模仿qq登录界面,初识Android二之小试牛刀模仿实现qq登陆界面

    初识Android二之小试牛刀模仿实现qq登陆界面.俗话说得好,老师踢开门,修行在自己.勉勉强强学完生命周期,然后悠悠闲闲听了两节课后,老师就布置了一个登陆界面的实现,于是,磕磕绊绊的修行之路开始了. ...

  10. pyqt5登录界面设计——模仿qq登录界面,可登录注册(数据库)

    pyqt5登录界面设计--模仿qq登录界面 一.简单易用的可直接登录的界面--账号密码程序写死 1.1.效果图: 1.2.视频效果图 3.代码说明 4.使用示例 5.全部源码见: 二.带数据库的可登录 ...

最新文章

  1. Class,表名,表单参数名关系
  2. MySQL添加、删除字段
  3. Android复习04(适配器 Get()请求 适配器 getView()方法 Post()请求 保存Cookie 流转字符串 从网上获取图片 重点考Json解析)
  4. Flask框架(flask中设置和获取session)
  5. OpenCV添加图像轨迹轨迹条 Adding Images Trackbar的实例(附完整代码)
  6. 查找字段 如何 过滤
  7. 使用Servlet上传多张图片——Dao层(BaseDao.java)
  8. “三峡水怪”的真面目竟是这个!水怪:我不要面子的吗?
  9. 【GDB调试学习笔记】 Makefie上
  10. dispatch js实现_js实现对象自定义事件,触发,on监听事件的方式
  11. SQL 获取本周日期
  12. 为Clion配置mingw32或mingw64
  13. Python3爬取人人网(校内网)个人照片及朋友照片,并一键下载到本地~~~附源代码...
  14. 移动智能与终端安全防护
  15. Python Pandas DataFrame 删除缺失值 None Nan drop dropna 替换缺失值 fillna 重复值删除 duplicate 数值替换 replace apply
  16. 校招总结—FPGA从入门到放弃
  17. 微信小程序车牌组件代码
  18. 6.2 漫反射-半兰伯特
  19. Android manifest文件中的标签详细介绍
  20. 金融情感分析--股市预测(一)

热门文章

  1. open cv中文文档
  2. 电脑测试耗电量软件,有测验电脑耗电量的软件么 ?
  3. 解决 1080端口已被占用
  4. EXCEL去掉所有英文
  5. 51单片机流水灯画图打板焊元件历程
  6. JMeter代理录制手机app
  7. 一种动态阈值白平衡算法实现
  8. kali攻击139端口_入侵445端口-永恒之蓝漏洞利用-Metasploit
  9. 京东咚咚架构演进(IM通讯)
  10. (转)文通慧视的用法