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&
,另一个是CustomPolygon*
。我的理解是这些必须匹配。即使一个是另一个的适当子类,我认为您不能像这样混合引用和指针。
并且,关于您的(稍微转述的)评论:
我的槽必须保持为指针,因为它指向一个正在从
QGraphicsScene
中删除的项目。我的信号不能是指针,因为没有从
QPolygonF
到QPolygonF *
的转换,我需要QPolygonF
到mapToScene
。
我认为我明白你在说什么,但有几个问题。
如果您的插槽需要一个将被释放的指针,您必须给它一个指针,并放弃对它后面的对象的控制(所以要么从你愿意的动态分配的副本开始放手,或者制作一个你不想想放手的东西的动态分配副本)。
而且我不确定您为什么认为没有从对象到指向该对象的指针的转换。我想这是技术上正确的,因为类本身不提供转换,但这确实是基础语言的一部分:
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