Qt之高仿QQ通信软件(二)
作者:互联网
Qt之高仿QQ通信软件(二)
鄙人有优化了一下界面,效果图如下:
登录界面暂时先这样了。
界面的样式.qss如下
/*注册按钮*/
#logonBt{
border-style:none; /*默认值:边框不显示*/
}
/*状态显示*/
#stateBt{
border-style:none; /*默认值:边框不显示*/
}
QComboBox::drop-down
{
width:20px;
background:transparent; /*不加此句下拉箭头背景色为灰色与整体样式不一致,也可设置 border:0px; border-radius:0px; background:white; border-left:0px ; 即设置为无边框*/
padding-right:5px;
}
/*输入用户名和密码框设置圆角*/
#UserEdit,#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);
}
/*鼠标靠近控件时*/
QLineEdit#PasswordEdit:hover
{
padding-top:0px ;
border: 1px solid rgb(21 , 131 , 221);
}
/*鼠标靠近控件时*/
QLineEdit#UserEdit:hover
{
padding-top:0px ;
border: 1px solid rgb(21 , 131 , 221);
}
/*登录按钮*/
#regBt{
/*qproperty-icon:url(:/resource/登录.png);*/
/*qproperty-iconsize: 295px 44px;*/
/*qproperty-toolButtonStyle: ToolButtonTextUnderIcon;*/ /*文本设置在图标的下方*/
border-style:none; /*默认值:边框不显示*/
}
还有个别的图标在.cpp中设置,如下
//动态gif显示
QMovie *movie = new QMovie(":/resource/QQ.gif");
ui->label->setMovie(movie);
movie->start();
//打开.qss样式表
QFile file(":/QSS/button_icon.qss");
file.open(QFile::ReadOnly);
QString StyleSheet = file.readAll();
qApp->setStyleSheet(StyleSheet);
file.close();
//设置控件图标
ui->QQlabel->setPixmap(QPixmap(":/resource/1.gif"));
ui->userlabel->setPixmap(QPixmap(":/resource/usericon.png"));
ui->locklabel->setPixmap(QPixmap(":/resource/lock.png"));
之后我们可以添加数据库,用来保存账号和密码
//添加数据库
db = QSqlDatabase::addDatabase("QSQLITE","USER");
db.setDatabaseName("user.db");
if(!db.open())
{
qDebug()<<"open sql error";
}
else {
qDebug()<<"open ok";
}
//创建表格
QString createname = "create table if not exists user(id integer primary key autoincrement,username text not NULL,password text not NULL)";
QSqlQuery query(createname,QSqlDatabase::database("USER"));
if(!query.exec())
{
qDebug()<<"create error";
}
else {
qDebug()<<"create ok";
}
现在可以实现注册账号功能了,如下
//注册
void Login::on_logonBt_clicked()
{
QString username = ui->UserEdit->text();
QString password = ui->PasswordEdit->text();
if(username.count()&&password.count())
{
//密码加密
QCryptographicHash hash(QCryptographicHash::Md5);
hash.addData(password.toUtf8());
QByteArray passray = hash.result();
password = passray.toHex();
qDebug()<<password;
//插入保存注册数据
QString sql = QString("insert into user(username,password) values('%1','%2')").arg(username).arg(password);
qDebug()<<sql;
QSqlQuery query(QSqlDatabase::database("USER"));
if(!query.exec(sql))
{
qDebug()<<"insert error";
}
else {
qDebug()<<"insert ok";
//插入成功
QMessageBox::information(this,"提示","注册成功");
}
}
else
{
qDebug()<<"用户名或密码不能为空";
QMessageBox::information(this,"提示","注册失败");
}
}
登录需要对比输入框和数据库用户名和密码是否匹配,如下
//登录
void Login::on_regBt_clicked()
{
QString username = ui->UserEdit->text();
QString password = ui->PasswordEdit->text();
//密码加密
QCryptographicHash hash(QCryptographicHash::Md5);
hash.addData(password.toUtf8());
QByteArray passray = hash.result();
password = passray.toHex();
qDebug()<<password;
QString sql = QString("select * from user where username='%1' and password='%2'").arg(username).arg(password);
QSqlQuery query(QSqlDatabase::database("USER"));
if(!query.exec(sql))
{
qDebug()<<"select error";
}
else {
qDebug()<<"select ok";
}
if(!query.next())
{
qDebug()<<"用户名或密码输入错误";
}
else {
//进入主界面之前先把该界面的用户名和密码清除
ui->UserEdit->setText("");
ui->PasswordEdit->setText("");
#if 0
//进入主界面
function *newmywin = new function();
newmywin->show();
this->hide();
connect(newmywin,&function::back_signals,this,[=](){ //将Mywindow的对象和主界面关联起来,Mywindow中的按钮发出clicked信号给Mywindow的对象,该对象发出back_signals信号给主界面
newmywin->hide();
this->show();
});
#endif
}
}
有些注释掉可以忽略啊
好了,基本的登录界面和功能都实现了,但还不完整,之后在优化了。
下一章我们来实现了通信聊天功能了,这也是我实现的目的。
标签:QQ,界面,Qt,ui,qDebug,通信软件,password,border,hash 来源: https://blog.csdn.net/qq_46495964/article/details/111403022