Domanda

Ho creato un widget personalizzato plugin. Il plugin si integra bene con Qt Creator, ma quando compilo il programma, sto ottenendo questo errore:

"test.h: No such file or directory"

Dove test.h è il nome del widget personalizzato. Che cosa sto facendo di sbagliato? Questo è il file * .pro dell'applicazione:

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

Questo è il file * .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)
È stato utile?

Soluzione

Dopo approfondite ricerche, mi sono imbattuto in questa discussione:

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

Si scopre che quando si compila un plugin, il "dll" che si ottiene è solo per scopi di integrazione Designer Qt Qt Creator /. Non è possibile collegare contro quella libreria. È necessario fornire un'altra libreria che contiene le intestazioni e il codice sorgente o includerli nel progetto. Quindi, per riassumere, qui ci sono le misure adeguate per distribuire un widget personalizzato:

  1. Creare una libreria contenente le fonti e le intestazioni del widget personalizzato. Chiamiamo questa biblioteca A. In alternativa, aggiungere le sorgenti e le intestazioni per il vostro progetto.
  2. Crea il plugin per l'integrazione widget di Qt Creator / designer. Ancora una volta, questo plugin non è utilizzabile per altro che l'integrazione Qt Creator / designer.
  3. Nel progetto, è necessario aggiungere le seguenti righe al file * .pro:

    LIBS + = C: \ [PATH TO biblioteca per BINARIO]
    INCLUDEPATH + = C: \ [PATH TO biblioteca per HEADERS]

Avviso ancora una volta che ci si collega alla libreria A, NON per la libreria che si ottiene quando si compila il widget di plugin.

Altri suggerimenti

Se si può vedere il tuo widget in designer, il plugin sta lavorando il modo che hai specificato a. Il tuo problema è fondamentalmente che il programma che si sta compilando non riesce a trovare il file di intestazione per il widget si aggiunge tramite il plugin. La risposta è probabilmente una delle due cose:

  • Aggiungi più il percorso per l'intestazione nel vostro plugin, in modo che i programmi che utilizzano il widget possono trovare il colpo di testa in modo appropriato.
  • Aggiungi il percorso del file di intestazione come un percorso di inclusione per il compilatore, in modo che il compilatore può trovare l'intestazione appropriata quando i file del programma di riferimento di esso.

Ho affrontato con lo stesso problema. Poi ho provato ad aggiungere tutti i file di intestazione e file cpp di DLL plug-in file di applicazioni di progetto explicitly.it risolto il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top