QT 窗体上放GIF动态图
来源:互联网 发布:淘宝客内部卷网站源码 编辑:程序博客网 时间:2024/06/02 11:03
开发背景是这样的:当后台开始进行数据库更新,用户会看到一个等待界面。数据库更新完成后,等待界面自动消失。
操作数据库
QT提供多种数据存储方式,我们可以选择一种driver,然后用标准查询语句进行系列操作。
下面是非常简单的例子:
#include <QtSql/QSqlDatabase>#include <QCoreApplication>#include <QStringList>#include <QDebug>#include <QSqlError>#include <QSqlQuery>int main(int argc, char **argv){ QCoreApplication app(argc, argv); QStringList drivers = QSqlDatabase::drivers(); foreach (QString it, drivers) { qDebug()<<it; } qDebug()<<""; QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("./student"); if(db.open()){ QSqlQuery query; if(!query.exec("create table today(title text)")){ qDebug()<<"create: "<<query.lastError(); } if(!query.exec("insert into today values('hello world')")){ qDebug()<<"insert: "<<query.lastError(); } if(!query.exec("select * from today")){ qDebug()<<"create: "<<query.lastError(); } while(query.next()){ QString title = query.value(0).toString(); qDebug()<<"title: "<<title; } db.close(); } else qDebug()<<"db open failed."; return app.exec();}
执行(先打印出能用的driver,然后使用QSlite存储数据):
"QSQLITE""QMYSQL""QMYSQL3""QODBC""QODBC3""QPSQL""QPSQL7"title: "hello world"
存储的数据库以二进制文件的方式存放在相应的路径下。
需要注意的是:
QSqlQuery的查询语句最好不要使用字符串拼接方式构造。那样不容易处理语句中的特殊字符,比如\n
, \"
等。
如下:
"insert into MessageTable values(1, 29, \"Warning\", 0, \"BluetoothController, NULL == argv\")""insert into MessageTable values(1, 30, \"Warning\", 0, \"mkdir(\"/pps/foryou/bluetooth\", 0777) = -1\")"insert: QSqlError("1", "Unable to execute statement", "near \"\", 0777) = -1\"\": syntax error")"insert into MessageTable values(31, 27, \"Warning\", 0, \"CEQMcuFile::ParseRecDataPacket:CEQMcuFile, Unknown case:%d\\n\", pBuf[nTypePos]\")"insert: QSqlError("1", "Unable to execute statement", "near \"[nTypePos]\": syntax error")"insert into MessageTable values(40, 3, \"LEVEL_WARNING\", 0, \"getProcessPid:opendir(\"/proc\")failed\")"insert: QSqlError("1", "Unable to execute statement", "near \"\")failed\"\": syntax error")
bindValue是我们需要的。
// 少用拼接查询字符串,避免语法错误query.prepare("INSERT INTO MessageTable ""VALUES (:Id, :Code, :Level, :Param, :Desc)");query.bindValue(":Id", Id);query.bindValue(":Code", Code);query.bindValue(":Level", Level);query.bindValue(":Param", Param);query.bindValue(":Desc", Desc);
放置背景图片
pic = new QImage(":/wait.png"); this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Background,QBrush(*pic)); this->setPalette(palette);
QMovie *movie = new QMovie(":/wait.gif"); ui->label->setMovie(movie); movie->start();
放置动态GIF图,我想多说两句。
时钟就在一个新的线程中,属于开启了事件循环的线程
我企图自己创建一个线程,然后在线程函数run中调用QMovie::jumpToNextFrame()
.
gifRun::gifRun(){ waitW = new waitWin(); waitW->movie->start();}gifRun::~gifRun(){ if(waitW != NULL){ delete waitW; waitW = NULL; }}void gifRun::run(){ while(1){ qDebug()<<"hello"; waitW->movie->jumpToNextFrame(); }}
当运行的时候出现问题了:
QObject::killTimer: Timers cannot be stopped from another threadQObject::startTimer: Timers cannot be started from another thread
而且父进程一旦进行其他操作,就会停止动态图。
当我将父进程中的后台数据处理放在一个独立线程中(具体工作内容写于run函数,QThread::start()会调用run()),GIF图由QMovie自己管理(另一个线程)。两者可以同时正常工作:
如图:
阅读全文
0 0
- QT 窗体上放GIF动态图
- qt显示动态图 gif
- .C#窗体上怎么显示动态图片如gif
- QT 显示动态GIF
- QT 显示动态GIF
- UILabel上添加gif动态图
- Qt显示动态gif图片
- Qt:播放动态gif图片
- QT显示动态gif图片并且运行在未安装QT的机器上
- [VB.NET]窗体放在Panel上???
- Qt for Android/iOS - Animated GIF(动态GIF图片)
- 显示GIF动态图
- GIF动态图制作
- Gif动态图显示
- Gif动态图
- Gif动态图加载
- GIF动态图制作
- 实现动态的GIF 图片显示到窗体中
- (第二题) 逻辑,条理思维!!!
- Ubuntu16.04禁用客人会话
- Java复习笔记---泛型
- Mybatis实现简单的增删改查
- JS基础笔记
- QT 窗体上放GIF动态图
- 【实战\聚焦Python分布式爬虫必学框架Scrapy 打造搜索引擎项目笔记】第4章 scrapy爬取知名技术文章网站(2)
- java语法简单规范,根据jdk
- Linux Zookeeper的安装
- Python Import 详解与datetime
- UVa 10260 Soundex
- 对几种开发语言的认识及markdown编辑器的初级认识
- NOIP前中总结
- HashMap为什么是线程不安全的?