Pergunta

Usando o QT Creator, estou criando uma classe com slots personalizados no QT:


class CustomEdit : public QTextEdit
{
    Q_OBJECT

public:
    CustomEdit(QWidget* parent);

public slots:
    void onTextChanged ();
};

No entanto, estou recebendo esse erro de vinculador:

undefined reference to 'vtable for CustomEdit'

A documentação diz:

Se você receber erros do compilador a longo de "referência indefinida ao VTable for LCDNumber", provavelmente esqueceu de executar o MOC ou incluir a saída MOC no comando Link.

... mas não é óbvio o que isso significa.

Existe algo que preciso adicionar à minha aula ou ao arquivo .pro?

EDITAR - Aqui está meu arquivo .pro:

QT += network \
    script \
    webkit \
    xml
TARGET = MyApp
TEMPLATE = app
SOURCES += main.cpp \
    MainWindow.cpp \
    CustomEdit.cpp 
HEADERS += MainWindow.h \
    CustomEdit.h
FORMS += mainwindow.ui

EDITAR:

Essa questão Lida com os mesmos problemas, mas as respostas não deixam claro como posso corrigir esse problema no QT Creator. Preciso adicionar explicitamente o arquivo .cpp gerado pelo MOC à minha lista de arquivos a ser vinculada? Isso parece uma dor.

Foi útil?

Solução

O QT Creator é um IDE usado para criar seus projetos QT. Isso é tudo. Mas o QMake permite que você compre o projeto. A partir de Manual QMake,

O QMake automatiza a geração de makefiles para que apenas algumas linhas de informação sejam necessárias para criar cada makefile. O QMake gera um makefile com base nas informações em um arquivo de projeto. O QMake contém recursos adicionais para apoiar o desenvolvimento com QT, incluindo automaticamente as regras de construção para MOC e UIC.

Você não deve incluir seus arquivos MOC separadamente, mas é necessário executar o QMake, que contém todas as informações sobre os arquivos MOC necessários. Dê uma olhada no gerado Makefile.debug ou Makefile.release Após o QMake e você pode encontrar todos os arquivos MOC serão incluídos para você.

Agora, para executar o Qmake no QT Creator, basta ir para Build->RebuildAll que executarão os arquivos QMake e todos os arquivos (MOC) também serão gerados e vinculados (no makefile.debug).

Espero que isso elimine sua referência indefinida.

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