6

Qt 共有ライブラリと Qt アプリケーションを含むアプリケーションを開発しました。Qt 共有ライブラリは、シグナルがほとんどない単一のクラスをエクスポートします。これには Q_DECL_EXPORT / Q_DECL_IMPORT マクロを使用しました。現在、dll とアプリケーション間の通信は Qt シグナルとスロットを介して行われており、QObject を使用してアプリケーションを開発する必要があります。

クライアント アプリケーションが Qt フレームワークに依存しない理想的な DLL として、Qt 共有ライブラリを作成するよう依頼されました。

次の投稿を見ましたが、Qt 以外のアプリケーションで Qt ベースの DLL を使用していますが、それが最善のアプローチであるかどうかはわかりません。

Qt以外のアプリケーションで使用するQt共有ライブラリを開発するための可能なオプションを教えてください。

4

3 に答える 3

3

QCoreApplicationライブラリの新しいスレッドでのインスタンスを作成できます。そのインスタンスを 1 つだけ作成するようにチェックする必要があります。これは、各 Qt アプリケーションに 1 つだけを含める必要があるためQCoreApplicationです。

したがって、ライブラリは次のようになります。

class Q_DECL_EXPORT SharedLibrary :public QObject    
{
Q_OBJECT
public:
    SharedLibrary();

private slots:

    void onStarted();

private:
    static int argc = 1;
    static char * argv[] = {"SharedLibrary", NULL};
    static QCoreApplication * app = NULL;
    static QThread * thread = NULL;
};


SharedLibrary::SharedLibrary()
{
    if (thread == NULL)
    {
        thread = new QThread();
        connect(thread, SIGNAL(started()), this, SLOT(onStarted()), Qt::DirectConnection);
        thread->start();
    }
}
SharedLibrary::onStarted()
{
   if (QCoreApplication::instance() == NULL)
   {
       app = new QCoreApplication(argc, argv);
       app->exec();
   }
}  

このようにして、Qt 以外のアプリケーションでも Qt 共有ライブラリを使用できます。

于 2015-01-15T17:30:20.933 に答える
1

Qtライブラリとの静的リンケージを使用する必要があると思います。静的 Qt ライブラリ ビルドを取得または作成し、それを使用して共有ライブラリをコンパイルする必要があります。

于 2013-06-20T20:00:21.913 に答える