2015-06-22 8 views
1

Я являюсь подклассом QwtPlot. У меня есть следующее сообщение об ошибке:LNK2001: Неразрешенный внешний символ при использовании графика qwt в создателе Qt

moc_myplot.obj: -1: ошибка: LNK2001: неразрешенный внешний символ "общественности: статическая структура QMetaObject Const QwtPlot :: staticMetaObject" (staticMetaObject @ QwtPlot @@ 2UQMetaObject @@ B?) Я попытался выполнить следующие действия: запустите qmake, перестройте, очистите, удалите папку отладки, перекомпилируйте qwt-библиотеку. Это не помогает. Вот минимальный код: myplot.h:

#ifndef MYPLOT_H 
#define MYPLOT_H 
#include <QObject> 
#include <qwt_plot.h> 

class MyPlot : public QwtPlot 
{ 
    Q_OBJECT 
public: 
    MyPlot(); 
}; 

#endif // MYPLOT_H 

myplot.cpp:

#include "myplot.h" 

MyPlot::MyPlot() 
{ 

} 

Вот .pro файл:

#------------------------------------------------- 
# 
# Project created by QtCreator 2015-06-22T19:33:24 
# 
#------------------------------------------------- 

QT  += core gui 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = MyPlot 
TEMPLATE = app 


SOURCES += main.cpp\ 
     mainwindow.cpp \ 
    myplot.cpp 

HEADERS += mainwindow.h \ 
    myplot.h 

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../qwt-6.1.2/lib/ -lqwt 
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../qwt-6.1.2/lib/ -lqwtd 
else:unix: LIBS += -L$$PWD/../../../../../qwt-6.1.2/lib/ -lqwt 

INCLUDEPATH += $$PWD/../../../../../qwt-6.1.2/include 
DEPENDPATH += $$PWD/../../../../../qwt-6.1.2/include 

Я использую Qt Creator 3.4. 1 На основе Qt 5.4.2 (MSVC 2013, 32 бит). Комплект: Рабочий стол Qt 5.4.2 MSVC2013 64 бит. Компилятор: Microsof Visual C++ Compiler 12.0 (amd64). Если я прокомментирую Q_OBJECT макрос в myplot.h все в порядке. Я могу использовать qwt_plot без подкласса, так что this->setCentralWidget(new QwtPlot()); строка в mainwindow.cpp в порядке.

+0

Вы посмотрели в документации, чтобы узнать, что же такое требования использования 'Q_OBJECT'? –

+0

Методы QwtPlot, похоже, отсутствуют. Знаете ли вы, что определенная библиотека определяет их и что вы указали для ссылки на эту библиотеку? – donjuedo

+0

@Captain Понятно, конечно. Класс MyPlot содержит несколько сигналов и слотов. Я удалил их в этом примере кода. – lnk

ответ

2

Похоже, что это старый issue, который присутствовал, по крайней мере, в версии 4.6.

Обходной путь - это препроцессор, определяющий QWT_DLL из «самой низкой библиотеки, которая вызывает QWT».

+0

Я добавил 'DEFINES + = QWT_DLL' строку в' .pro' файл. Оно работает! – lnk

+0

@lnk Рад, что решение сработало для вас. –