day8
- 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);
}
- (并发服务器)有新连接就创建新套接字,每个客户端都有各自的套接字,独立地与服务器进行连接。
创建简单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;*/
}