我的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)
基于这种结构,似乎我在构造F3DApp时应该设置我的qApp(在qapplication.h中定义,static_cast(QCoreApplication :: instance())。但是,它不是如下所示:
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:必须在之前构建QApplication 的QPaintDevice“);
我已经用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类:public QApplication时,这曾经很好用。我可以简单地将所有F3DApp功能转移到QEnsQtApp作为解决方法,但我不喜欢地毯下的彻底问题因为我无知。我宁可不要无知。