c++ - 链接 Qt Creator 插件编辑器/荧光笔

标签 c++ qt qt-creator

我正在开发一个 qt creator 插件,它通过提供自定义编辑器等来增加对某些类型文件的支持。现在它注册了一个新的 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

我做错了什么?我必须声明更多依赖项吗?在编译时,是否可以使用命令强制目标文件的文件夹位于我的路径中?

谢谢!

最佳答案

“Internal”命名空间中的类和方法往往不会被导出,因此它们在提供它们的插件之外不可用。检查类定义:类关键字和类名之间是否有“SOMETHING_EXPORT”?如果没有,那你就不走运了。

默认情况下,导出的符号越少越好:这让我们有机会实际进行更改,而不必担心破坏插件外部的代码。它还可以减少加载时间。如果您有导出符号的用例:请随时在 Qt Creator 邮件列表上提问,或者——更好的是——向 codereview.qt-project.org 提供一个补丁,将类移出内部命名空间并导出符号。

回答此类问题的更好地点是 Qt Creator mailing list以及 freenode 网络上的#qt-creator IRC channel 。

关于c++ - 链接 Qt Creator 插件编辑器/荧光笔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092795/

相关文章:

c++ - #include QtWebKit (Qt4) 或 QtWebKitWidgets (Qt<5.6) 或 QtWebEngineWidgets (Qt>=5.6)

c++ - QT QCharts添加删除系列

android - Qt:在 Android 和 iOS 上设置应用程序图标

macos - 在 mac os x 中使用 qtcreator 和 gnu g++4.8

c++ - 在 C++ 中同时运行具有不同参数的相同 exe

c++ - `::operator new` 是做什么的?

c++ - 为什么我会收到浮点异常错误?

具有受限方法访问的 C++ 指针

c++ - Qt QQuickFramebufferObject OpenGL渲染侵入其他物体场景为红色

keyboard-shortcuts - Qt-Creator 中是否有 "go to last edit"快捷方式?