gpt4 book ai didi

c++ - 判断系统是否可以实例化QApplication(GUI支持)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:28 25 4
gpt4 key购买 nike

我的程序可以在没有 GUI 的服务器上或桌面上运行。当它在可以显示 GUI 的系统上运行时,我想实例化 QApplication,当它在服务器上运行时,我想要 QCoreApplication。

如果我在服务器上实例化 QApplication,它要么出现段错误(至少它曾经如此),要么显示错误消息并退出,而不让我有机会实例化 QCoreApplication:

This application failed to start because it could not find or load the Qt platform plugin "xcb". Available platform plugins are: linuxfb, minimal, offscreen. Reinstalling the application may fix this problem.

认真的吗?

目前,当我在服务器上运行我的程序时,我只是传递一个 -noGui 参数。它工作正常,但我想检测系统是否可以使用 QApplication,所以我可以摆脱这个论点。

我确信在某个地方已经有了答案,但我无法得到它。

最佳答案

以防万一有人想知道我是如何解决这个问题的,我拦截了 QApplication 发送的 SIGABRT 信号,并改为实例化 QCoreApplication。它工作得非常好,而且是跨平台的。

#include <QApplication>
#include <csetjmp>
#include <csignal>
#include <cstdlib>

jmp_buf env;

void onSigabrt(int)
{
longjmp (env, 1);
}

QCoreApplication *loadQt(bool gui)
{
QCoreApplication *application = NULL;

if (gui)
{
if (setjmp(env) == 0)
{
signal(SIGABRT, &onSigabrt);
application = new QApplication();
}
signal(SIGABRT, SIG_DFL);
}
if (!application)
application = new QCoreApplication();
return (application);
}

关于c++ - 判断系统是否可以实例化QApplication(GUI支持),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26707571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com