dec*_*eck 5 c++ console user-interface qt
我的程序可以在没有GUI的服务器上或桌面上运行。当它在可以显示GUI的系统上运行时,我想实例化QApplication,而当它在服务器上时,我想要QCoreApplication。
如果我在服务器上实例化QApplication,则它要么是Segfault(至少以前是这样),要么显示错误消息并退出,而没有让我机会实例化QCoreApplication:
此应用程序无法启动,因为它找不到或加载Qt平台插件“ xcb”。可用的平台插件为:linuxfb,最少,离屏。重新安装该应用程序可能会解决此问题。
认真吗?
目前,我在服务器上运行程序时仅传递-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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |