QObject::connect: 没有这样的信号错误 C++

Posted

技术标签:

【中文标题】QObject::connect: 没有这样的信号错误 C++【英文标题】:QObject::connect: No such signal eror C++ 【发布时间】:2020-04-24 22:00:11 【问题描述】:

我遇到了一个错误,我不知道我哪里出错了我尝试使用 qapp 运行信号,以确保它不是信号,这一切都很好。我在头文件中将 SLOT 声明为公共插槽。

信号声明:

void editPolygon(QVector <QPointF> points, QPolygonF &);

这是我的连接:

  connect(this, SIGNAL(editPolygon(QVector <QPointF> &, QPolygonF &)), parent, SLOT(editPolygon(QVector <QPointF> points, CustomPolygon *poly)));

这是我发出信号的插槽:

void CustomPolygon::editPolygons()

    QVector<QPointF> points;
    QPolygonF poly = mapToScene(polygon());

    emit editPolygon(points,poly);

这是 mainwindow.cpp 中的空白:

void MainWindow::editPolygon(QVector<QPointF> &points, CustomPolygon *poly)


提前感谢您的帮助!

【问题讨论】:

你还在用Qt4吗?如果不使用现代语法。你能粘贴你的信号声明吗? 嗨,我在顶部粘贴了我的声明,是的,我现在将研究新的语法 不应将其解释为“新”Qt 的 SIGNAL/SLOT 语法可以工作/而旧的则不能..您得到错误背后的问题 (No such signal) 是因为 Signal/Slot 函数签名应该完全匹配 【参考方案1】:

我要做的第一件事是非常努力地查看信号/插槽匹配的第二个参数的差异。

一个是QPolygon&amp;,另一个是CustomPolygon*。我的理解是这些必须匹配。即使一个是另一个的适当子类,我认为您不能像这样混合引用和指针。


并且,关于您的(稍微转述的)评论:

我的槽必须保持为指针,因为它指向一个正在从QGraphicsScene 中删除的项目。

我的信号不能是指针,因为没有从 QPolygonFQPolygonF * 的转换,我需要 QPolygonFmapToScene

认为我明白你在说什么,但有几个问题。

如果您的插槽需要一个将被释放的指针,您必须它一个指针,并放弃对它后面的对象的控制(所以要么从你愿意的动态分配的副本开始放手,或者制作一个你不想想放手的东西的动态分配副本)。

而且我不确定您为什么认为没有从对象到指向该对象的指针的转换。我想这是技术上正确的,因为类本身不提供转换,但这确实是基础语言的一部分:

Type thing;
Type *pointerToThing = &thing;

这两个问题都应该可以通过以下方式解决:

QVector<QPointF> points;
QPolygonF thisIsMyPoly = mapToScene(polygon());
QploygonF *thisIsPolyForFreeing = new QPolygonF(thisIsMyPoly);
emit editPolygon(points, thisIsPolyForFreeing);

您的信号仍然需要更改为使用指针而不是引用,希望这会减轻不匹配的情况。


如果您的指针是一个 actual 指向 QPolygonF 的无法复制的指针(因为它是指向 QGraphicsScene 中保存的实际项目的指针,因此您需要原始指针删除它),我认为您应该能够按原样传递该指针,假设 mapToScene() 正在返回对它的引用而不是副本:

QPolygonF poly = mapToScene(polygon()); // get ref.
emit editPolygon(points, &poly);        // pass ref's address.

【讨论】:

嗨,是的,我知道,但问题是我不知道如何让它以任何其他方式工作,我的插槽必须保留为指针,因为它指向一个正在从QGraphicsScene 和我的信号不能是指针,因为没有从 QPolygonF 到 QPolygonF * 的转换,我需要 QPolygonF 到 mapToScene @jaykay:我想我明白你在说什么,请看更新。

以上是关于QObject::connect: 没有这样的信号错误 C++的主要内容,如果未能解决你的问题,请参考以下文章

QObject::connect: 没有这样的信号错误 C++

QObject::connect: 没有这样的信号progressbarV::keyReleaseEvent()

QObject::connect: 没有这样的信号运行时警告 - 找不到原因

如果在调用 QObject::connect() 之前发出信号,如何避免竞争?

QObject::connect: 需要括号,信号 QSerialPort::readyRead in ..\voltage_sensor\dialop.cpp:41

如何修复QObject::connect:没有这样的插槽..将发送者连接到同一类中的插槽时[重复]