3

我创建了一个自定义小部件插件。该插件与 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)
4

3 回答 3

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:\[PATH TO LIBRARY'S A BINARY]
    INCLUDEPATH += C:\[PATH TO LIBRARY'S A Headers]

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

于 2010-03-22T11:36:20.343 回答
1

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

  • 在插件中添加更多标题的路径,以便使用小部件的程序可以适当地找到标题。
  • 将头文件的路径添加为编译器的包含路径,以便编译器在程序文件引用它时可以找到适当的头文件。
于 2010-03-21T18:22:23.273 回答
0

我面临同样的问题。然后我尝试将插件DLL的所有头文件和.cpp文件显式添加到应用程序项目文件中。它解决了这个问题。

于 2015-09-03T04:42:31.317 回答