确定系统是否可以实例化QApplication(GUI支持)
Determine if the system can instantiate QApplication (GUI support)
我的程序可以在没有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);
}
相关文章:
- C++GTKMM gui循环依赖关系
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 如何在带有 gdb GUI 前端的 ARM gdbserver 的 PC 上执行远程 gdb 会话?
- 在 Gui Win32 中创建子窗口C++
- 如何防止 std::thread 在 QT 中冻结 GUI?
- 调试控制台 ChessEngine.exe "used"在另一个应用程序(国际象棋 GUI)中
- 更改 Windows GUI 中静态文本框的字体大小
- 我不知道如何使用代码块win32 gui
- Qt GUI使用Qfiledialogbox和qlabel显示视频,这是我的代码
- QtConcurrent - 在发布到 UI 线程的数千个结果中保持 GUI 响应
- 德尔福在回调中出现 GUI 问题
- 从 GUI 文件资源管理器执行程序,并且不生成终端
- 线程和 GUI 处理
- C++ WinAPI[GDI].自定义 gui 正确重绘
- 从插槽调用 QApplication::p rocessEvents 会导致再次调用同一插槽
- Qt,操作缓慢时不要冻结GUI输入元素
- QT(4.8.2)GUI-自己的主循环,而不是qapplication :: exec()
- 确定系统是否可以实例化QApplication(GUI支持)