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

Solução

Após uma extensa pesquisa, tropecei neste tópico:

http://www.archivum.info/qt-interest@trolntech.com/2010-02/01398/re-%28qt-interest%29-undefined-reference-o-%28any-custom-widget%29.html

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:

  1. 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.
  2. 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.
  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top