2

私はFedora14でQt4.7.2を使用しています。

QtDesignerに統合しようとしているカスタムウィジェットの作業ライブラリがあります。単純なウィジェット基本クラスがあり、次にそれを継承するいくつかのより複雑なウィジェットがあります。単純なウィジェットはうまく統合されますが、より複雑なウィジェットには問題があります。

問題は、より複雑なものは、作成時に特別な構造を渡す必要があるという事実に起因します。したがって、プラグインで複雑なウィジェットを作成するための私のコードは次のとおりです。

QWidget *myPlugin::createWidget(QWidget *parent)
{
    my_struct *xyz = new my_struct;
    return new myWidget("MyWidget",xyz, parent);
}

my_structは、int、double、および配列を使用した単純なCスタイルの構造体です。

次に、このプラグインを使用してQt Designerを起動すると、次のようになります。

/usr/lib64/qt4/bin/designer: symbol lookup error: /usr/lib64/qt4/plugins/designer/libMyPlugin.so: undefined symbol: _ZN8MyWidgetC1E7QStringP17my_structP7QWidget

デバッグバージョンではなく、プラグインのリリースバージョンを作成しています。

また、プラグインでxyzを静的クラス変数として定義し、そのアドレスをコンストラクターに渡そうとしましたが、それでも同じエラーが発生します。

また、xyxを未使用の静的クラス変数として単純なウィジェットに追加しようとしましたが、エラーは発生しません。そのため、エラーはmyWidgetコンストラクターの呼び出しに起因しているようです。

誰かが私がこれを解決するのを手伝ってもらえますか?


ありがとうArne、

あなたは正しかった。

ライブラリをプラグインの.proファイルに明示的に追加したところ、機能しました。

ライブラリなしでエラーなしでプラグインを構築するにはどうすればよいのでしょうか。そして、なぜ私の単純なウィジェットがライブラリなしで機能したのですか?

4

1 に答える 1

1

エラーメッセージは、リンカがコンストラクタの定義を見つけられなかったかのように見えますmyWidget(QString, my_struct*, QWidget*)。関連するソースファイルをリリースビルドに追加しましたか?このコンストラクターの定義は実際にありますか?オブジェクトファイルのリンク順序を交換する必要がある場合もあります。私は過去に大規模なプロジェクトでこれを見たことがあるので、それほど驚かないでしょう。定義を含むオブジェクトファイルは、定義を使用するオブジェクトファイルの前に記述する必要があります。

于 2011-10-04T07:45:06.580 に答える