首页 > 解决方案 > 如何将 Catch2 与 QT 事件循环集成?

问题描述

QT 的某些部分依赖于事件循环的启动和运行(或至少生成警告)。如何将 Catch2 测试与 QT 事件循环集成?

标签: qtcatch2

解决方案


要进行集成,添加一次性计时器将导致函数在应用事件循环处于活动状态时立即运行。这是我的代码的样子:

#define CATCH_CONFIG_RUNNER
#include "catch.hpp"
#include <QCoreApplication>
#include <QTimer>
int main(int argc, char *argv[]) {
  QCoreApplication app(argc, argv);
  QTimer::singleShot(0, [&]{
    app.exit(Catch::Session().run(argc, argv));
  });
  return app.exec();
}

特别是对我来说,我收到了一堆警告,上面写着“QSocketNotifier 只能用于以 QThread 开头的线程”,但事实证明这实际上只是意味着它想要一个事件循环存在。此处的代码为我删除了警告。


推荐阅读