gpt4 book ai didi

c++/qt - 没有这样的插槽 - 继承

转载 作者:太空狗 更新时间:2023-10-29 21:37:20 24 4
gpt4 key购买 nike

这段代码:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com