我正在开发一个qt Creator插件,该插件通过提供定制的编辑器等来添加对某些类型文件的支持。现在,它注册了一个新的IEditorFactory,该IEditorFactory生成基于TextEditor :: BaseTextEditor和TextEditor :: BaseTextEditorWidget的编辑器。
最终,我将创建和使用专用的荧光笔和其他东西,但是现在我想利用其他qt Creator插件中的东西,这是我遇到麻烦的地方。
特别是我想使用TextEditor :: Internal :: Highlighter,它可以加载和利用kate文件。我已经在使用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
我究竟做错了什么?我还要声明更多的依赖项吗?有没有我可以用来在编译时强制将目标文件的文件夹放在我的路径中的命令?
na!
最佳答案
“内部”名称空间中的类和方法往往不会被导出,因此在提供它们的插件之外不可用。检查类定义:class关键字和类名之间是否有“ SOMETHING_EXPORT”?如果没有,那么您就不走运了。
默认情况下,导出的符号越少越好:这使我们有机会进行实际更改,而不必担心在插件外部破坏代码。它还可以减少加载时间。如果您有导出符号的用例:请随时在Qt Creator邮件列表中询问,或者-更好的是-提供对codereview.qt-project.org的补丁,以将该类移出Internal命名空间并导出符号。
在freenode网络上,Qt Creator mailing list和#qt-creator IRC通道是获得此类回答的更好的地方。