我尝试从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

10-04 23:32