2

QT アプリケーションを作成していますが、コンパイルされたバイナリを GUI および CLI (X11 なしでインストール) 環境と互換性を持たせたいと考えていました。

以下は、 QApplication または QCoreApplication を使用する私の主な機能です。

int main(int argc, char *argv[]){
    // SOME COMMON CODE will be executed before this
    bool myGUI = getenv("DISPLAY") != 0;

    if(myGUI){
        QApplication a(argc, argv);
        client w; // A MainWindow Object
        w.show();
        doStuff();
        return a.exec();
    }else{
        QCoreApplication a(argc, argv);
        doStuff();
        return a.exec();
    }

    return 1;

}

これで、QT は動的共有オブジェクトとして libQtGui を持つバイナリをビルドします。libQtGui に必要なすべてのライブラリをインストールしなくても CLI 環境で動作できるように、libQtGui を動的にロードすることが可能かどうかを知りたかったのです。

4

2 に答える 2

0

これは Qt に関する質問ではなく、c++ に関する質問です

ここで答えを見つけることができます DLLから関数を動的にロードします

しかし、基本的にこれは悪い考えだと思います。純粋なコンソール アプリケーションまたは混合コンソール/GUI アプリケーションが必要な場合は、コンパイル時に #ifdef で解決する必要があります。

#ifdef WITH_GUI
if(myGUI){
    QApplication a(argc, argv);
    client w; // A MainWindow Object
    w.show();
    doStuff();
    return a.exec();
}else{
#endif    
    QCoreApplication a(argc, argv);
    doStuff();
    return a.exec();
#ifdef WITH_GUI
}
#endif

そして、いくつかの起動引数を追加します。たとえば、GUI サポート付きでコンパイルされたバージョンの ./myapp --start-gui 。

于 2013-07-26T10:31:33.610 に答える