我的 Qt 应用程序遇到了一些问题。看起来我的 qApp 未初始化,我不明白为什么。下面是演示该问题的代码片段。
class F3DApp : public QEnsQtApp
{
Q_OBJECT
.
.
}
class QEnsQtApp : public QApplication
{
Q_OBJECT
.
.
}
F3DApp::F3DApp(int& argc, char** argv)
: QEnsQtApp(argc, argv),
QEnsQtApp::QEnsQtApp( int &argc, char **argv)
:QApplication(argc, argv)
基于这个结构,似乎我的 qApp(定义在 qapplication.h,static_cast(QCoreApplication::instance()) 应该在我构造 F3DApp 时设置。但是,它不是如下所示:
int main (int argc, char ** argv, char* envp[])
{
F3DApp lapp(argc, argv);
F3DApp* app = &lapp;
QApplication *a = dynamic_cast<QApplication *> (app); // Good
QApplication *b = qApp; // Nothing?
}
这实际上在我的 QPixmap 内部造成了问题。我得到一个
qFatal("QPixmap: 必须在 QPaintDevice 之前构造一个 QApplication");
我已经用谷歌搜索了 QPixmap 的这个问题(在它里面是 qt_pixmap_thread_test()),看起来我在我的 qApp 实际初始化之前静态构造一个,这似乎是常见的问题。这是我制作 SplashScreen 的方法:
SplashScreen::SplashScreen(QString guiVersion, QString guiVersionDate)
: QSplashScreen(QPixmap(":/images/splash.png")),
m_guiVersion(guiVersion),
m_guiVersionDate(guiVersionDate)
{
}
然后从主开始,在我制作了我的 F3DApp 之后:
SplashScreen* splash = new SplashScreen(F3DApp::getVersionInfo(),
F3DApp::getAppDate());
这在 F3DApp 类:公共 QApplication 时可以正常工作。我可能只是将所有 F3DApp 功能移动到 QEnsQtApp 作为解决方法,但我不喜欢在地毯下扫除问题,因为我无知。我宁愿不要无知。