Я являюсь подклассом 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
в порядке.
Вы посмотрели в документации, чтобы узнать, что же такое требования использования 'Q_OBJECT'? –
Методы QwtPlot, похоже, отсутствуют. Знаете ли вы, что определенная библиотека определяет их и что вы указали для ссылки на эту библиотеку? – donjuedo
@Captain Понятно, конечно. Класс MyPlot содержит несколько сигналов и слотов. Я удалил их в этом примере кода. – lnk