0

カスタマイズされたエディターなどを提供することで特定の種類のファイルのサポートを追加するqtクリエータープラグインに取り組んでいます。現在、TextEditor::BaseTextEditorおよびTextEditor::BaseTextEditorWidgetに基づいてエディターを生成する新しいIEditorFactoryを登録しています。

最終的には専用の蛍光ペンなどを作成して使用する予定ですが、今のところ他のqtクリエータープラグインのものを利用したいので、困ります。

特に、kateファイルをロードして利用できるTextEditor :: Internal::Highlighterを使用したいと思います。私はすでにTextEditorプラグインの他のクラスを使用しているので、

include($$QTCREATOR_SOURCES/src/plugins/texteditor/texteditor.pri)

プロジェクトファイルに追加しました。texteditor.priの中では、すべてが良さそうです

include(texteditor_dependencies.pri)
LIBS *= -l$$qtLibraryName(TextEditor)

そして、実際、私は自分のエディターをコンパイルすることができます(これはtexteditorプラグイン内のものに依存しています)。

TextEditor :: Internal :: Highlighterとの唯一の違いは、私が知る限り、texteditorプラグインのサブフォルダーにあることです。これは問題ないはずで、オブジェクトファイルはすべて同じディレクトリにあるように見えますが、私が言うと

new TextEditor::Internal::Highlighter()

(texteditor / plaintexteditor.cppで行われているように)リンカーエラーが発生します

Undefined symbols for architecture x86_64:
  "TextEditor::Internal::Highlighter::Highlighter(QTextDocument*)", referenced from:
      MyPlugin::MyEditorWidget::MyEditorWidget(QWidget*)in myeditor.o
      MyPlugin::MyEditorWidget::MyEditorWidget(QWidget*)in myeditor.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

私は何が間違っているのですか?宣言しなければならない依存関係は他にもありますか?コンパイル中にオブジェクトファイルのフォルダを強制的にパスに含めるために使用できるコマンドはありますか?

Thnaks!

4

1 に答える 1

1

「内部」名前空間のクラスとメソッドはエクスポートされない傾向があるため、それらを提供するプラグインの外部では使用できません。クラス定義を確認してください: class キーワードとクラス名の間に「SOMETHING_EXPORT」がありますか? そうでない場合は、運が悪いです。

デフォルトでは、可能な限り少数のシンボルがエクスポートされます。これにより、プラグインの外部でコードが壊れることを心配することなく、実際に変更を加えることができます。また、ロード時間も少し短縮されます。シンボルをエクスポートするユースケースがある場合: Qt Creator メーリング リストでお気軽にお問い合わせください。名前空間とシンボルをエクスポートします。

このような質問への回答を得るためのより良い場所は、Qt Creator メーリング リストと、freenode ネットワークの #qt-creator IRC チャンネルです。

于 2012-12-16T00:30:23.207 に答える