QEventLoop野指针异常 原创
QEventLoop野指针异常
更多精彩内容 |
---|
👉个人内容分类汇总 👈 |
👉Qt开发经验 👈 |
-
问题说明
- 当使用QMainWindow时,在子控件的showEvent、resizeEvent事件函数中使用事件循环,则在程序启动时会出现崩溃。
- 但是QWidget中使用不会出现。
-
环境
- Qt 5.9
- Qt5.12
- Qt5.14
- Mingw
- MSVC2015
- MSVC2017
-
复现步骤
-
创建一个QMainWindow工程;
-
添加一个QWidget或者其子类的类文件;
-
在widget类或者子类中重写showEvent、resizeEvent函数;
-
在showEvent、resizeEvent函数中使用事件循环;
void msleep(int m ) { QEventLoop loop; QTimer::singleShot(m, &loop, &QEventLoop::quit); loop.exec(); } void Form::showEvent(QShowEvent *event) { msleep(10); }
-
在MainWindow类中添加widget子控件(可以提升为,也可以在构造函数中添加);
-
程序编译运行,在启动的时候很大可能出现崩溃异常。
-
-
异常调试
-
通过调试Qt源码,定位异常出现在QObject.h文件中,但是无法确定具体原因。
-
总之,避免在事件函数中使用QEventLoop。
-