2

我的 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 作为解决方法,但我不喜欢在地毯下扫除问题,因为我无知。我宁愿不要无知。

4

0 回答 0