Qt插件不起作用

时间:2010-03-21 16:49:30

标签: qt plugins linker qmake

我已经创建了一个自定义小部件插件。该插件与Qt Creator完美集成,但是当我编译程序时,我收到了这个错误:

“test.h:没有这样的文件或目录”

其中test.h是自定义小部件的名称。我究竟做错了什么?这是应用程序的* .pro文件:

TEMPLATE = app
SOURCES += main.cpp \
    mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui

这是插件的* .pro文件:

CONFIG      += designer plugin debug_and_release
TARGET      = $$qtLibraryTarget(testplugin)
TEMPLATE    = lib
HEADERS     = testplugin.h
SOURCES     = testplugin.cpp
RESOURCES   = icons.qrc
target.path = $$[QT_INSTALL_PLUGINS]/designer
INSTALLS    += target
include(test.pri)

3 个答案:

答案 0 :(得分:5)

经过广泛的研究,我偶然发现了这个帖子:

http://www.archivum.info/qt-interest@trolltech.com/2010-02/01398/Re-%28Qt-interest%29-Undefined-reference-to-%28any-custom-widget%29.html

事实证明,当您编译插件时,您获得的“dll”仅用于Qt Creator / Qt Designer集成目的。您无法链接到该库。您应该提供另一个包含标题和源代码的库,或者将它们包含在项目中。总而言之,以下是部署自定义小部件的正确步骤:

  1. 创建一个包含自定义窗口小部件源和标头的库。让我们调用这个库A.或者,将源和标题添加到项目中。
  2. 为Qt Creator / Designer集成创建小部件插件。同样,此插件不适用于除Qt Creator / Designer集成之外的任何其他内容。
  3. 在项目中,必须将以下行添加到* .pro文件中:

    LIBS + = C:\ [图书馆的二进制路径]
    INCLUDEPATH + = C:\ [通往图书馆的一个标题]

  4. 再次注意,您要链接到库A,而不是编译小部件插件时获得的库。

答案 1 :(得分:1)

如果您可以在设计器中看到您的小部件,那么您的插件就会按照您指定的方式工作。您的问题基本上是您正在编译的程序找不到您通过插件添加的小部件的头文件。答案可能是以下两点之一:

  • 为插件中的标题添加更多路径,以便使用该窗口小部件的程序可以正确找到标题。
  • 将头文件的路径添加为编译器的包含路径,以便编译器在程序文件引用时找到相应的头文件。

答案 2 :(得分:0)

我遇到了同样的问题。然后我试着将插件DLL的所有头文件和.cpp文件明确地添加到应用程序项目文件中。修复了这个问题。