其他分享
首页 > 其他分享> > Qt之高仿QQ通信软件(二)

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