这段代码:
MyAxis *ax;
ax = static_cast<MyAxis*>(ui->customPlot->axisRect()->addAxis(QCPAxis::atLeft));
connect(ui->customPlot->yAxis, SIGNAL(rangeChanged(QCPRange)),
ax, SLOT(MyAxis::rescale(QCPRange)));
给我这个运行时错误:
QObject::connect: No such slot
QCPAxis::MyAxis::rescale(QCPRange)
in plotwindow.cpp:267
通常当我遇到这样的错误时,我会在类中添加 Q_OBJECT
宏并运行 qmake
来修复它,但这次没有用。
这是类的声明:
class MyAxis : public QCPAxis
{
Q_OBJECT
public:
void setRefAxis(QCPAxis *refAxis);
void setScale(double newScale);
public Q_SLOTS:
virtual void rescale(const QCPRange &range);
private:
double scale;
QCPAxis *ref;
};
将声明更改为 public slots:
没有任何区别。
最佳答案
我认为你在尝试做的事情上有问题:
ui->customPlot->axisRect()->addAxis(QCPAxis::atLeft)
返回 QCPAxis
而不是 MyAxis
类。假设 QCPAxiz 占用 100 个字节的内存,而 MyAxis 占用 110 个字节,那么您正在尝试这样做:
A_110_Byte_Type* p110Bytes = static_cast<110-bytes *> (<100-bytes>); // not real code!
我不明白这是怎么回事。您正在调用的函数返回一个 QCPAxis 并且您不能仅仅因为它们共享相同的基类就将它转换为 MyAxis ......这有点像拥有一辆福特嘉年华并说,“现在它是一辆法拉利”只是因为它们具有相同的“汽车”基本类型。
所以目前我认为你陷入了未定义的行为......
你想做什么? - 您可以将 QCPAxis 的值复制到您的 MyAxis 中(使用复制构造函数 - 我认为您需要其中一个来执行此操作)
关于c++/qt - 没有这样的插槽 - 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37958129/