多线程:
方法一:
class MyQThread : public QThread 声明一个类继承线程对象
void run(); 在虚函数run中显示操作 start函数启动线程 quit退出线程
QMutex mutex; 声明一个互斥信号量。 mute.lock 到 mute.unlock 中的代码段不会被打断。
方法二:
md5check md5calc; QThread md5thread; 声明一个继承qobject的类,声明一个线程
md5calc.moveToThread(&md5thread); 将类移至线程中
md5thread.start(); 开启线程,主线程和子线程智能通过信号和槽连接 ladbam表达式不能用
线程同步互斥方法:https://blog.csdn.net/LG1259156776/article/details/52273929
MD5文件校验:
QCryptographicHash hash(QCryptographicHash::Md5); 声明一个md5加密的哈希值
filepath = QFileDialog::getOpenFileName(this,"openfile","/home/wandong/project/"); 找到文件
file.setFileName(filepath); 打开文件
file.open(QIODevice::ReadOnly); 只读模式
if(file.exists()){ 文件存在
while(!file.atEnd()){ 没有读到文件结尾
QByteArray data = file.read(1024*1024); 1M1M读取
hash.addData(data); 数据添加到哈希值中
}
md5hashvalue = hash.result().toHex(); 计算哈希值 转换成16进制
file.close(); 关闭文件
Sicket通信:
localaddress = QNetworkInterface::allAddresses(); 得到所有的ip地址
// localinter = QNetworkInterface::allInterfaces(); 得到所有的网卡
foreach (QHostAddress var, localaddress) { 循环遍历地址
if(var.isNull()) 地址是否为空
continue;
QAbstractSocket::NetworkLayerProtocol prot = var.protocol(); 得到地址协议
if(prot != QAbstractSocket::IPv4Protocol) 格式是否为ipv4
quint16 port = ui->port->text().toInt(); 得到端口号
tcpserver->isListening() 判断当前是否在监听
tcpserver->listen(address,port) 监听当前端口,成功返回true
connect(tcpserver,&QTcpServer::newConnection,[=](){ 检测到有新连接到来
tcpsocker = tcpserver->nextPendingConnection(); 将新连接交给套接字
//tcpsocker->peerName(); 窥视客户名称
});
SQL操作:
QSqlDatabase dbtest = QSqlDatabase::addDatabase("QMYSQL"); //设置打开数据库格式
dbtest.setHostName("127.0.0.1");
dbtest.setUserName("root");
dbtest.setPassword("123");
dbtest.setDatabaseName("test");
if(!dbtest.open())
{
QMessageBox::critical(this,"警告","数据库连接失败!!!");
this->close();
}
QSqlQuery query("SELECT DISTINCT * " //操作
"FROM login " //来源
"WHERE user = 'wd'" //条件
"AND passwd = '123';",dbtest);//复合条件
while(query.next()){
qDebug()<<"table name:"<<query.value(0).toString()<<query.value(1).toString();
}
if(query.exec("INSERT INTO login (user,passwd,part,contory) VALUES ('fd','321','南京','中国');"))
{
qDebug()<<"插入成功";
}else {
qDebug()<<"插入失败";
}
if(query.exec("UPDATE login SET user='fuda',passwd='951' WHERE user='fd'"))
{
qDebug()<<"修改成功";
}else {
qDebug()<<"修改失败";
}
if(query.exec("DELETE FROM login WHERE user='fuda'"))
{
qDebug()<<"删除成功";
}else {
qDebug()<<"删除失败";
}