【发布时间】:2018-07-16 12:51:28
【问题描述】:
有没有办法在类方法中执行 QTest::qExec() 而不是 main()? 我需要将我的测试项目编译为 dll 而不是独立的 .exe。 该dll被现有的GUI使用,测试应通过按钮执行。
但是,当调用 qexec 时,QTGUI 冻结并且不再响应。 以下是处理 Buttons 请求以执行测试的 qt 插槽的实现,稍后应读取结果并将其显示在一些 QEdit 小部件中(它已经在虚拟结果中工作)。
int GUI_Form::onTestRequested()
{
const char* n_argv[] = { "-o", "dummy.txt"};
QCoreApplication CoreApp(argc, const_cast<char**>(n_argv));
QApplication app(argc, const_cast<char**>(n_argv));
return QTest::qExec(&mTestform, argc, const_cast<char**>(n_argv));
}
它编译得很好。不实现 QCoreApplication 和 QApplication 在功能上没有区别,我添加它们是因为它们在通常的 main() 中是必需的。
【问题讨论】:
-
如果您已经有一个
QApplication(您的GUI 应用程序),为什么还需要另一个QApplication?我认为你的测试槽应该这样做:return QTest::qExec(&mTestform, QStringList() << "-o" << "dummy.txt"); -
@vahancho 感谢您的评论。这也是我的猜测,但它不起作用。由于 QT 的旧版本,我不能使用漂亮的 QStringList。除此之外,如果没有 QApplication,它也不起作用。您还有其他想法吗?