QTday8

day8

  1. QT上使用sqlite保存账号密码

引入SQL模块

.pro文件加入
QT += sql

引入头文件

#include <QSqlDatabase>//数据库成员定义
#include <QtWidgets>
#include <QSqlError>
#include <QSqlQuery>//对数据库操作

做两个槽函数实现:往数据库里增加项目,使用数据库命令。

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

源文件里,在构造函数打开数据库

    //判断默认连接是否存在,若存在默认自动打开这个连接
    if (QSqlDatabase::contains("qt_sql_default_connection"))

    //创建数据库对象db,添加数据库驱动"QSQLITE",
    //addDatabase默认第二个参数是创建连接名称qt_sql_default_connection
    QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
    //使用自定义的连接名称db = QSqlDatabase::addDatabase("QSQLITE", "my_sql_connection);

    //数据库文件名
    db.setDatabaseName("my.db");
    //设置用户名 密码db.setUserName("");db.setPassword("");

    //打开数据库
    if(!db.open())
    {
        qDebug() << "database open failed";
    }
    else
    {
        qDebug() << "database open success";
    }

添加数据到数据库

//创建对数据库操作的类对象
QSqlQuery query;
//调用SQL命令语句为"select * from user"
query.exec("select * from user");
//用户名 密码
QString username,password;
//
while(query.next())
{
    //第一个数据放到username
    username=query.value(0).toString();
    //第二个数据放到password
    password=query.value(1).toString();
    //在文本浏览器显示出用户名和密码
    ui->textBrowser->insertPlainText(username+ " : " + password+"\n");
}

查看数据库内容

void Dialog::on_pushButton_2_clicked()
{
    QSqlQuery query;
    //插入用户名和密码
    QString str=QString("insert into user(username,password) values(\"%1\",\"%2\")").arg(ui->lineEdit->text()).arg(ui->lineEdit_2->text());
    //调用SQL命令语句为str
    query.exec(str);
}
  1. (并发服务器)有新连接就创建新套接字,每个客户端都有各自的套接字,独立地与服务器进行连接。

创建简单main.cpp工程

引入network模块

myserver头文件:设置连接套接字的保护成员

protected:
    void incomingConnection(qintptr socketDescriptor);

mytcpsocket头文件:私有成员,数据包大小和接收客户端信息的函数

private slots:
    void readClient();
private:
    quint16 nextBlockSize;

main源文件:配置监听套接字,设置退出按钮

    MyServer myServer;
    myServer.listen(QHostAddress::Any,7788);

    QPushButton pushButton("quit");
    pushButton.show();
    QObject::connect(&pushButton,SIGNAL(clicked()),&a,SLOT(quit()));

myserver源文件:继承QTcpsocket类,实现配置套接字函数

MyServer::MyServer(QObject *parent) : QTcpServer(parent)
{

}

void MyServer::incomingConnection(qintptr socketDescriptor)
{
    MyTcpSocket *myTcpSocket=new MyTcpSocket(this);
    myTcpSocket->setSocketDescriptor(socketDescriptor);

}

mytcpsocket源文件:连接信号与槽,实现接收函数

MyTcpSocket::MyTcpSocket(QObject *parent) : QTcpSocket(parent)
{
    connect(this,SIGNAL(readyRead()),this,SLOT(readClient()));
    connect(this,SIGNAL(disconnected()),this,SLOT(deleteLater()));
    nextBlockSize=0;
}

void MyTcpSocket::readClient()
{
    QDataStream in(this);
    if(nextBlockSize==0)
    {
        if(bytesAvailable() < sizeof(quint16))
            return;
        in >> nextBlockSize;
    }
    if(bytesAvailable() < nextBlockSize)
        return;
    quint8 type;
    in >> type;
    QString username,password;
    /*if(type == quint8('L'))
        in >> username >> password;
    qDebug() << username;
    qDebug() << password;*/
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值