学习Qt5(11)
来源:互联网 发布:网络剧如何赚钱 编辑:程序博客网 时间:2024/05/29 08:39
1.Qt多线程
1)主要使用QThread类进行线程的操作,基本函数有start,stop,wait,terminate,sleep等;
2)利用锁来控制多线程访问临界资源,QMutex,QMutexLocker,QSemaphore,QWaitCondition,
3)QMutexLocker在构造函数中接收QMutex对象为参数进行锁定,在析构中会自动解锁这个互斥量;
4)QSemaphore信号量,可以同时保护多个资源,acquire()获得资源,release()释放资源;
5)QWaitCondition唤醒条件,对等待的线程进行唤醒。
2.Qt数据库
1)常用SQL语句:
Select + 选择的限定 + from子句 + where子句 + group子句 + order子句;
Insert into + 表/视图 + 外部数据库的路径和名称 + 插入的列表;
Delete + from表 + where条件;
Update + 表 + set + 更新字段=新的值;
2)聚合函数:用于计算表中的数据,返回单个计算结果,包括avg(平均值),count(项数),max(最大值),min(最小值),sum(和),VAR(统计方差);
3)Qt使用QtSql模块进行数据库的操作,示例代码:
QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE"); //建立数据库连接 db.setHostName("huamoxian11"); //设置数据库主机名 db.setDatabaseName("huamoxian.db"); //设置数据库名 db.setUserName("huamoxian"); //设置数据库用户名 db.setPassword("123456"); //设置数据库密码 db.open(); //打开连接 //创建数据库表 QSqlQuery query; bool success=query.exec("create table student(id int primary key,name varchar,old int,grade int)"); if (success) { qDebug() << QObject::tr("succeed\n"); } else { qDebug() << QObject::tr("failed\n"); } //查询 query.exec("select * from student"); QSqlRecord rec = query.record(); qDebug() << QObject::tr("student:" ) << rec.count(); //插入记录 QTime t; t.start(); query.prepare("insert into student values(?,?,?,?)"); long records = 100; for (int i = 0; i < records; i++) { query.bindValue(0, i); query.bindValue(1, "huamoxian"); query.bindValue(2, rand()%100); query.bindValue(3, rand()%100); success = query.exec(); if (!success) { QSqlError lastError = query.lastError(); qDebug() << lastError.driverText() << QString(QObject::tr("failed")); } } qDebug() << QObject::tr("insert %1 number,time:%2 ms").arg(records).arg(t.elapsed()); //排序 t.restart(); success = query.exec("select * from student order by id desc"); if (success) { qDebug() << QObject::tr("order %1 number,time:%2 ms").arg(records).arg(t.elapsed()); } else { qDebug() << QObject::tr("failed!"); } //更新记录 t.restart(); for (int i = 0; i < records; i++) { query.clear(); query.prepare(QString("update student set name=?,old=?," "grade=? where id=%1").arg(i)); query.bindValue(0,"huamoxian"); query.bindValue(1,rand()%100); query.bindValue(2,rand()%100); success = query.exec(); if(!success) { QSqlError lastError=query.lastError(); qDebug() << lastError.driverText() << QString(QObject::tr("failed")); } } qDebug() << QObject::tr("update %1 number,time:%2 ms").arg(records).arg(t.elapsed()); //删除 t.restart(); query.exec("delete from automobil where id=15"); qDebug() << QObject::tr("delete one,time:%1 ms").arg(t.elapsed()); return 0;
4)Qt模型/视图访问数据库类主要包括,QSqlQueryModel,QSqlTableModel,QSqlReletionalTableModel,它们不需要使用sql语句就可以对数据库进行操作,在界面上易于显示。
- 学习Qt5(11)
- 学习Qt5(1)
- 学习Qt5(2)
- 学习Qt5(3)
- 学习Qt5(4)
- 学习Qt5(5)
- 学习Qt5(6)
- 学习Qt5(7)
- 学习Qt5(8)
- 学习Qt5(9)
- 学习Qt5(12)
- Qt5学习笔记(1)
- QT5学习
- QT5学习
- QT5 学习之路11---MainWindow 简介
- Qt5开发学习之事件(十三)
- Qt5--QSS学习笔记(一)
- QT5 学习之路07---QT5事件
- BZOJ 4316 小C的独立集 仙人掌DP
- 生命不惜,醉球不止
- 关于网站图标favicon.ico
- 15.Xcode7中使用UIWebView时加载不出网页的问题
- js小案例效果学习记录--倒计时
- 学习Qt5(11)
- LeetCode——H-Index II
- wince软件开发人员应了解的socket网络编程一(摘录)
- wince软件开发人员应了解的socket网络编程二(摘录)
- c程序代码重构(摘)
- arm映象结构(转/实践测试)
- 常用辅助类——JSON,XML,模型互转,MD5,Base64
- move zeros leetcode
- 王亟亟的Python学习之路(三)-基础语法以及基本数据类型