QT 窗体上放GIF动态图

网友投稿 722 2022-08-27

QT 窗体上放GIF动态图

QT 窗体上放GIF动态图

开发背景是这样的:当后台开始进行数据库更新,用户会看到一个等待界面。数据库更新完成后,等待界面自动消失。

操作数据库

QT提供多种数据存储方式,我们可以选择一种driver,然后用标准查询语句进行系列操作。 下面是非常简单的例子:

#include #include #include #include #include #include int main(int argc, char **argv){ QCoreApplication app(argc, argv); QStringList drivers = QSqlDatabase::drivers(); foreach (QString it, drivers) { qDebug()<

执行(先打印出能用的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);

放置背景图片

静态背景图片

= new QImage(":/wait.png"); this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Background,QBrush(*pic)); this->setPalette(palette);

动态背景图片 (gif)

*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自己管理(另一个线程)。两者可以同时正常工作:

如图:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python 更换windows壁纸(简单)
下一篇:Print debug message based on MinGW
相关文章

 发表评论

暂时没有评论,来抢沙发吧~