我尝试从QCustomPlot类派生,然后将小部件升级为该特定类,但是在构建时显示以下错误。
Graphytti / myqcustomplot.cpp:2:错误:对“ vtable for MyQCustomPlot”的未定义引用
:-1:错误:collect2:错误:ld返回1退出状态
以下是myqcustomplot.h文件的内容
#ifndef MYQCUSTOMPLOT_H
#define MYQCUSTOMPLOT_H
#include "qcustomplot.h"
#include<QPoint>
class MyQCustomPlot:public QCustomPlot{
Q_OBJECT
QPoint cursor_pos;
public:
explicit MyQCustomPlot(QWidget *parent=0);
void mouseMoveEvent(QMouseEvent * event);
void paintEvent(QPaintEvent *event);
void paintCoordinate();
};
#endif // MYQCUSTOMPLOT_H
以下是我的qcustomplot.cpp文件的内容
#include "myqcustomplot.h"
MyQCustomPlot::MyQCustomPlot(QWidget *parent): QCustomPlot(parent)
{
;
}
void MyQCustomPlot::mouseMoveEvent(QMouseEvent * event)
{
cursor_pos = event->pos();
replot();
QCustomPlot::mouseMoveEvent(event);
}
void MyQCustomPlot::paintEvent(QPaintEvent *event)
{
QCustomPlot::paintEvent(event);
paintCoordinate();
}
void MyQCustomPlot::paintCoordinate()
{
/*double price = getPrice(cursor_pos);
int y = yAxis->coordToPixel(price);*/
int y=0;
QPainter painter(this);
painter.drawLine(QPoint(50, y), QPoint(width(), y));
painter.drawLine(cursor_pos, QPoint(cursor_pos.x(), y));
//painter.drawText(QPoint(0, y), QString::number(price));
//painter.drawText(cursor_pos, timestamp);
}
经过一番搜索,我意识到我的构造函数可能定义不正确,或者存在一些可能的链接问题。
我是Qt开发的新手,并希望在此问题上获得帮助。
问题解决了
我不知道到底是什么问题。我删除了两个文件,然后使用QtCreator再次添加了它们。这次构建之后没有问题。可能是MOC问题,因此赞成该答案。
最佳答案
每次创建Q_OBJECT
类时,都应运行qmake
生成所需的moc cpp文件。
Build -> Run qmake