Plugins QT não funcionam
Pergunta
Eu criei um plug -in de widget personalizado. O plugin se integra bem ao QT Creator, mas quando eu compilar o programa, estou recebendo este erro:
"Test.h: nenhum arquivo ou diretório"
Onde test.h é o nome do widget personalizado. O que estou fazendo errado? Este é o arquivo *.Pro do aplicativo:
TEMPLATE = app
SOURCES += main.cpp \
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
Este é o arquivo *.Pro do 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)
Solução
Após uma extensa pesquisa, tropecei neste tópico:
Acontece que, quando você compila um plug -in, a "DLL" que você recebe é apenas para fins de integração do QT Creator/Qt Designer. Você não pode vincular a essa biblioteca. Você deve fornecer outra biblioteca que contém os cabeçalhos e o código -fonte ou incluí -los em seu projeto. Então, para resumir, aqui estão as etapas adequadas para implantar um widget personalizado:
- Crie uma biblioteca que contenha as fontes e cabeçalhos do widget personalizado. Vamos chamar essa biblioteca A. Alternativamente, adicione as fontes e cabeçalhos ao seu projeto.
- Crie o plug -in Widget para a integração do Criador/Designer QT. Novamente, este plug -in não é utilizável para outra coisa que não seja a integração do QT Creator/Designer.
No seu projeto, você deve adicionar as seguintes linhas ao arquivo *.Pro:
Libs += c: [caminho para a biblioteca é um binário
Includepath += c: [caminho para os cabeçalhos da biblioteca
Observe mais uma vez que está vinculando à Biblioteca A, não à biblioteca que você recebe quando compila o plug -in do widget.
Outras dicas
Se você puder ver seu widget no designer, seu plug -in está funcionando da maneira que você especificou. Seu problema é basicamente que o programa que você está compilando não consegue encontrar o arquivo de cabeçalho para o widget que você está adicionando através do plug -in. A resposta é provavelmente uma das duas coisas:
- Adicione mais o caminho ao cabeçalho do seu plug -in, para que os programas que usam o widget possam encontrar o cabeçalho adequadamente.
- Adicione o caminho ao arquivo de cabeçalho como um caminho de inclusão ao seu compilador, para que o compilador possa encontrar o cabeçalho apropriado quando os arquivos do programa o fizeram.
Eu enfrentei o mesmo problema. Então tentei adicionar todos os arquivos de cabeçalho e arquivos .cpp da DLL do plug -in no arquivo do projeto de aplicativos explicitamente.it corrigiu o problema.