《QT从基础到进阶·三十一》事件循环QCoreApplication,QGuiApplication,QApplication

简介: 《QT从基础到进阶·三十一》事件循环QCoreApplication,QGuiApplication,QApplication

QCoreApplication:为非界面类项目提供一个事件监听循环。

QGuiApplication:以QtGui模块基础开发的界面项目需要应用环境。

QApplication:以QWidget模块基础开发的界面项目需要应用环境。

可以简单总结为,如果是非界面项目开发,建议使用QCoreApplication;如果是界面类项目开发,建议使用QApplication。

报错处理:

QEventLoop: Cannot be used without QApplication

比如有个QT动态库被python调用的时候报上面的错误,导致信号槽失效或者QThread线程失效等问题。

可能的原因:

QT内部用到了事件循环,比如QThread用到了事件循环,由于QT动态库没有main函数,内部没有QApplication a(argc, argv);return a.exec();没有执行事件循环的程序,所以需要手动添加。但又不能运行QApplication (或 QGuiApplication 或 QCoreApplication)中的exec(),因为这是阻塞的,真正需要运行的是processEvents()

对于没有界面的事件循环可以这样写:

#include <QCoreApplication>
static int argc = 1;
static char arg0[] = "";
static char* argv[] = { arg0, nullptr };
Q_GLOBAL_STATIC_WITH_ARGS(QCoreApplication, app, (argc, argv))

在程序的最开始处添加app->processEvents();表示事件循环,如果在程序中创建了两次线程,moveToThread两次,说明需要两次事件循环,这里的app->processEvents()事件循环为非阻塞循环那需要在程序最开始处添加两次app->processEvents();加if (!QCoreApplication::instance())目的因QT的DLL没有自动创建事件循环,外部程序比如python调用QT的DLL时就会进入if里面创建事件循环,如果是带有界面的QT程序调用QT的DLL,本身界面的main函数中自带事件循环就不会走到if里面再次创建事件循环。



相关文章
|
7月前
|
监控 安全 开发者
【Qt 并发 】理解Qt中事件循环与并发机制的协同工作
【Qt 并发 】理解Qt中事件循环与并发机制的协同工作
493 4
|
7月前
|
安全 数据处理 C++
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
1555 3
|
7月前
|
程序员 编译器 C++
【深入探究Qt内部架构】QObject、事件循环与Q_OBJECT宏的协同作用(一)
【深入探究Qt内部架构】QObject、事件循环与Q_OBJECT宏的协同作用
209 0
|
7月前
|
设计模式 开发框架 编译器
【深入探究Qt内部架构】QObject、事件循环与Q_OBJECT宏的协同作用(二)
【深入探究Qt内部架构】QObject、事件循环与Q_OBJECT宏的协同作用
262 0
|
7月前
|
安全
深入理解Qt多线程编程:QThread、QTimer与QAudioOutput的内在联系__Qt 事件循环(三)
深入理解Qt多线程编程:QThread、QTimer与QAudioOutput的内在联系__Qt 事件循环
212 0
|
7月前
|
存储 安全 程序员
深入理解Qt多线程编程:QThread、QTimer与QAudioOutput的内在联系__Qt 事件循环(二)
深入理解Qt多线程编程:QThread、QTimer与QAudioOutput的内在联系__Qt 事件循环
873 0
|
7月前
|
安全 测试技术 C++
深入理解Qt多线程编程:QThread、QTimer与QAudioOutput的内在联系__Qt 事件循环(一)
深入理解Qt多线程编程:QThread、QTimer与QAudioOutput的内在联系__Qt 事件循环
487 0
QT应用编程: 使用QEventLoop实现事件循环
QT应用编程: 使用QEventLoop实现事件循环
854 0
QT应用编程: 使用QEventLoop实现事件循环
Qt-QML-Charts-ChartView-编译错误-ASSERT: “!“No style available without QApplication!
昨天本来是回家想好好琢磨一下使用Chart来绘制曲线的,奈何在建立项目的时候也就卡住了,加上心情比较烦躁,也没有耐心寻找答案就草草了事。所以今天继续搞定这个。
363 0
Qt-QML-Charts-ChartView-编译错误-ASSERT: “!“No style available without QApplication!
Centos6.5 Qt4开发 Cannot find -lGL QApplication not file or dir
1,QApplication 头文件不存在 qt4是基于offline 包安装的,而OS系统默认已经安装qt3 /usr/bin/ld: cannot find -lGL yum -y install libGL libGL-devel; 开发环境首先要做的是gnome,vncserver,(for Centos6.
1062 0