2012-10-26 32 views
0

我正在開發一個qt creator插件,它通過提供自定義編輯器等來增加對某些類型文件的支持。現在它註冊一個新的IEditorFactory,它生成的編輯器基於TextEditor :: BaseTextEditor和TextEditor :: BaseTextEditorWidget。鏈接Qt Creator插件編輯器/熒光筆

最終我會創建和使用專門的熒光筆和其他東西,但現在我想利用其他qt創作插件的東西,這就是我遇到麻煩的地方。

特別是我想使用TextEditor :: Internal :: Highlighter,它可以加載和使用kate文件。我已經在使用TextEditor插件中的其他類,所以我有

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

添加到我的項目文件中。裏面texteditor.pri一切似乎都很好

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

,事實上,我能夠編譯我的編輯器(它是依賴於文本編輯插件裏面的東西)。

與TextEditor :: Internal :: Highlighter的唯一區別 - 就我所知 - 就是它位於texteditor插件的子文件夾中。這應該是罰款,並在目標文件似乎在同一個目錄下的所有土地,但是當我說

new TextEditor::Internal::Highlighter() 

(就像在文本編輯/ 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!

回答

0

「內部」名稱空間中的類和方法往往不會被導出,所以它們在提供它們的插件之外不可用。檢查類定義:它在類關鍵字和類名之間是否有「SOMETHING_EXPORT」?如果不是,那麼你的運氣不好。

默認情況下會導出儘可能少的符號:這讓我們有機會真正改變事物而不必擔心在代碼之外破壞代碼。它還可以縮短加載時間。如果您有要導出符號的用例:請隨時在Qt Creator郵件列表上提問或 - 更好的是 - 爲codereview.qt-project.org提供一個補丁,以便將該類移出內部名稱空間並導出該符號。

一個更好的地方可以得到這樣的問題回答是Qt Creator mailing list和freenode網絡上的#qt-creator IRC頻道。