#include "logindialog.h"
#include "ui_logindialog.h"
#include <QPainter>
#include <QHBoxLayout>
#include <QPoint>
#include <QPixmap>
#include <QMenu>
#include <QIcon>
#include <QToolButton>
LoginDialog::LoginDialog(QWidget *parent) :
QWidget(parent),
ui(new Ui::LoginDialog)
{
ui->setupUi(this);
//加载样式文件
qssFile = new QFile(":/default.qss");
qssFile->open(QFile::ReadOnly);
QString styleSheet = QString(qssFile->readAll());
qApp->setStyleSheet(styleSheet);
qssFile->close();
ui->loginPushButton->setText(tr("Login"));
ui->rememberCheckBox->setText(tr("RememberPassword"));
ui->autoCheckBox->setText(tr("AutomaticLogon"));
ui->registerPushButton->setText(tr("Register"));
ui->forgotPushButton->setText(tr("ForgotPassword"));
ui->btnSetPushButton->setToolTip(tr("Setting"));
ui->btnMinPushButton->setToolTip(tr("Minimize"));
ui->btnClosePushButton->setToolTip(tr("Close"));
ui->passwordLineEdit->setPlaceholderText(tr("Password"));
ui->comboBox->setCurrentText(tr("QQ/Telephone/Email"));
ui->userIcon->setPixmap(QPixmap(":/images/userIcon.jpg"));
ui->statusPushButton->setToolTip(tr("LoginingStatus"));
QHBoxLayout *hLayout = new QHBoxLayout;
hLayout->addWidget(ui->btnSetPushButton);
hLayout->addWidget(ui->btnMinPushButton);
hLayout->addWidget(ui->btnClosePushButton);
hLayout->setContentsMargins(0,0,0,0);
setFixedSize(430,330);
setWindowFlags(Qt::FramelessWindowHint| Qt::WindowMinimizeButtonHint);
setMouseTracking(true);
connect(ui->statusPushButton,&QPushButton::clicked,this,&LoginDialog::statusBtnClicked);
connect(ui->btnClosePushButton,&QPushButton::clicked,this,&QWidget::close);
connect(ui->btnMinPushButton,&QPushButton::clicked,this,&QWidget::showMinimized);
connect(ui->btnSetPushButton,&QPushButton::clicked,this,&LoginDialog::changeSkin);
}
LoginDialog::~LoginDialog()
{
delete ui;
}
void LoginDialog::initStatusButtons(QMenu *menu)
{
QAction *statusAction = menu->addAction(initStatusIcon(online),tr("I am online"),this,SLOT(changedStatus()));
statusAction->setData(online);
statusAction = menu->addAction(initStatusIcon(qme),tr("Q me"),this,SLOT(changedStatus()));
statusAction->setData(qme);
menu->addSeparator();
statusAction = menu->addAction(initStatusIcon(away),tr("I am away"),this,SLOT(changedStatus()));
statusAction->setData(away);
statusAction = menu->addAction(initStatusIcon(busy),tr("I am busy"),this,SLOT(changedStatus()));
statusAction->setData(busy);
statusAction = menu->addAction(initStatusIcon(nodisturb),tr("No disturbing,thanks"),this,SLOT(changedStatus()));
statusAction->setData(nodisturb);
menu->addSeparator();
statusAction = menu->addAction(initStatusIcon(hide),tr("Hide"),this,SLOT(changedStatus()));
statusAction->setData(hide);
menu->exec(QCursor::pos());
}
QIcon LoginDialog::initStatusIcon(int status)
{
QIcon icon;
switch (status) {
case away:
icon = QIcon(":/images/status_away.png");
break;
case qme:
icon = QIcon(":/images/status_Qme.png");
break;
case nodisturb:
icon = QIcon(":/images/nodisturb.png");
break;
case busy:
icon = QIcon(":/images/status_busy.png");
break;
case hide:
icon = QIcon(":/images/status_hide.png");
break;
default:
icon = QIcon(":/images/status_online.png");
break;
}
return icon;
}
void LoginDialog::paintEvent(QPaintEvent *event)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget,&opt,&p,this);
}
void LoginDialog::mousePressEvent(QMouseEvent *event)
{
if(event->buttons() && Qt::LeftButton){
offset = event->globalPos() - pos();
}
}
void LoginDialog::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() & Qt::LeftButton){
QPoint point;
point = event->globalPos()-offset;
move(point);
}
}
void LoginDialog::changedStatus()
{
QAction *action = (QAction*)sender();
int iconIdx =action->data().toInt();
ui->statusPushButton->setIcon(initStatusIcon(iconIdx));
}
void LoginDialog::statusBtnClicked()
{
QMenu *statusMenu = new QMenu(this);
initStatusButtons(statusMenu);
statusMenu->setGeometry(70,75,20,20);
}
void LoginDialog::changeSkin()
{
QMenu *skinMenu = new QMenu(this);
QAction *action = skinMenu->addAction(QIcon(":/images/default.png"),tr("Default"),this,SLOT(chooseSkin()));
action->setData(0);
action = skinMenu->addAction(QIcon(":/images/skin1.png"),tr("Fresh"),this,SLOT(chooseSkin()));
action->setData(1);
skinMenu->exec(QCursor::pos());
skinMenu->setGeometry(60,60,20,10);
}
void LoginDialog::chooseSkin()
{
QAction *a = (QAction*)sender();
if(a->data().toInt() == 0)
{
qssFile->setFileName(":/default.qss");
}
else{
qssFile->setFileName(":/style1.qss");
}
qssFile->open(QFile::ReadOnly);
QString styleSheet = tr(qssFile->readAll());
qApp->setStyleSheet(styleSheet);
qssFile->close();
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于QT的仿QQ登录界面
共36个文件
png:23个
qss:2个
cpp:2个
需积分: 46 74 下载量 198 浏览量
2018-05-07
11:10:32
上传
评论 1
收藏 356KB RAR 举报
温馨提示
基于QT的仿QQ登录界面,设计到的知识点包括QT国际化,QT样式表的使用
资源推荐
资源详情
资源评论
收起资源包目录
LoginDialog.rar (36个子文件)
LoginDialog
logindialog.h 961B
images
userIcon.jpg 3KB
btnSet.png 3KB
default.png 9KB
bg.png 21KB
btnMax1.png 3KB
btnSet1.png 3KB
loginbtn.png 3KB
downArrow.png 3KB
status_away.png 3KB
bg1.png 168KB
more_accountlogin1.png 4KB
status_hide.png 3KB
HeadImage.png 13KB
status_busy.png 3KB
back.gif 12KB
more_accountlogin.png 4KB
status_online.png 3KB
skin1.png 59KB
status_Qme.png 3KB
btnMax.png 3KB
flicker1.png 6KB
nodisturb.png 3KB
btnMin.png 3KB
btnMin1.png 3KB
flicker.png 5KB
myapp_zh_CN.qm 1KB
logindialog.cpp 5KB
myapp_zh_CN.ts 4KB
main.cpp 342B
LoginDialog.pro.user 23KB
LoginDialog.pro 1KB
images.qrc 1KB
style1.qss 4KB
default.qss 4KB
logindialog.ui 4KB
共 36 条
- 1
资源评论
ee4170
- 粉丝: 2
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功