c++ - 在主函数(库)之外实例化 QApplication

标签 c++ qt

我有一个 C++ 库,我计划向它添加一个可选功能(通过宏启用)以显示一些额外的调试信息。这个想法是创建并打开一个用 Qt 制作的窗口来显示一些数据。我的问题是我无法访问 main 函数(它是一个库),所以我无法创建 Qt 需要的 QApplication 对象。我试过像这样创建全局对象:

static int argc = 1;
static char argv[1][6] = {"myapp"};
static QApplication app(argc, (char**)argv);

它工作但在退出时崩溃(在 ~QApplication() 上)。

另一种选择是在堆上分配对象并使用新的 API 方法来初始化/完成库。但我根本不想更改 API。

还有一个会在我第一次需要打开一个窗口并泄漏它时在堆上分配。但这似乎不是一个好主意。

有什么想法吗?

我正在使用 Qt 5.1 和 GCC 4.8,目标是 Windows 和 Linux。

最佳答案

另一种选择是在堆上分配对象并使用新的 API 方法来初始化/完成库。但我根本不想更改 API。 - 好吧,不要泄露它,拥有一个全局堆分配对象,并在有人附加到库时创建它,并在附件分离时销毁它。是的,关于线程的观点也是 100% 正确的,因为附加/分离只是来自调用线程,你不能阻止它,你很可能想产生一个新线程,分配 QApplication 在那里,甚至可能在线程本地堆栈中,并在那里调用 run()

关于c++ - 在主函数(库)之外实例化 QApplication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20267228/

相关文章:

c++ - 选择——几个问题

qt - 在 QT Creator 中使用自定义构造函数提升自定义小部件

c++ - boost.org 的 Spirit 解析器生成器框架有哪些缺点?

C++11 递归可变参数模板

c++ - 如何使 QtLinguist 随 Qt 5.9.1 一起工作?

windows - MinGW 编译速度过慢

c++ - openPersistentEditor 中的 QSortFilterProxyModel

c++ - 当Visual Studio 2017从github源构建时,c1083错误

python - PyQt6在QSlider的paintEvent中设置自定义矩形

c++ - 组织 sqlite3 C/C++ 准备语句(避免全局代码困惑)