Pregunta

He creado un plugin de widget personalizado. El plugin se integra muy bien con Qt Creator, pero cuando compilo el programa, estoy recibiendo este error:

"test.h: No existe el fichero o directorio"

Cuando test.h es el nombre del widget personalizado. ¿Qué estoy haciendo mal? Este es el archivo .pro * de la aplicación:

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

Este es el archivo .pro * del plugin:

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)
¿Fue útil?

Solución

Después de una extensa investigación, me encontré con este hilo:

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

Resulta que al compilar un plugin, el "DLL" que se obtiene es sólo para propósitos de integración Qt Designer Qt Creator /. No se puede vincular en contra de esa biblioteca. Usted debe proporcionar otra biblioteca que contiene las cabeceras y el código fuente o incluirlos en su proyecto. Por lo tanto, para resumir, aquí están los pasos apropiados para desplegar un widget personalizado:

  1. Crear una biblioteca que contiene las fuentes y cabeceras del widget personalizado. Vamos a llamar a esta biblioteca A. Como alternativa, agregue las fuentes y cabeceras para su proyecto.
  2. Crea el plugin Reproductor de integración / diseñador Qt Creator. Una vez más, este plugin no se puede utilizar para otra cosa que la integración / diseñador Qt Creator nada.
  3. En su proyecto, debe añadir las siguientes líneas al archivo * .pro:

    LIBS + = C: \ [PATH a la biblioteca de un binario]
    INCLUDEPATH + = C: \ [PATH a la biblioteca de A HEADERS]

Aviso una vez más que está vinculando a la biblioteca A, NO a la biblioteca que se obtiene cuando se compila el plugin de widgets.

Otros consejos

Si se puede ver el widget en el diseñador, el plugin está funcionando de la manera que ha especificado que lo haga. Su problema es básicamente que el programa se está compilando no puede encontrar el archivo de cabecera para el widget que está agregando a través del plugin. La respuesta es probablemente una de dos cosas:

  • Añadir más de la ruta de acceso a la cabecera de su plugin, por lo que los programas que utilizan el widget puede encontrar la cabecera apropiada.
  • Añadir la ruta al archivo de cabecera como una ruta de inclusión a su compilador, por lo que el compilador puede encontrar el encabezado apropiado cuando hacen referencia a los archivos del programa a él.

Me enfrenté con mismo problema. Luego he intentado añadir todos los archivos de cabecera y archivos .cpp de plugin DLL en un archivo de proyecto de aplicaciones explicitly.it ha solucionado el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top