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)

この構造に基づいて、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: 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());

これは、class F3DApp : public QApplication の場合に正常に機能していました。回避策として、すべての F3DApp 機能を QEnsQtApp に単純に移動することもできますが、私は無知なので、問題を覆い隠すのは好きではありません。無知であってほしくない。

4

0 に答える 0