![](/img/trans.png)
[英]It is possible connect a QML Object existing signal in C++ QObject::connect()?
[英]QObject::connect: No such signal eror C++
我被一個錯誤困住了,我不知道我哪里出錯了我也嘗試用 qapp 運行信號只是為了確保它不是信號,一切都很好。 我在 header 文件中將 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)
{
}
感謝您提前提供幫助!
我要做的第一件事是非常仔細地查看信號/時隙匹配的第二個參數的差異。
一個是QPolygon&
,另一個是CustomPolygon*
。 我的理解是這些必須匹配。 即使一個是另一個的適當子類,我認為您不能像那樣混合引用和指針。
並且,關於您的(略有釋義的)評論:
我的插槽必須保留為指針,因為它指向正在從
QGraphicsScene
中刪除的項目。我的信號不能是指針,因為沒有從
QPolygonF
到QPolygonF *
的轉換,我需要QPolygonF
到mapToScene
。
我想我明白你在說什么,還有幾個問題。
如果你的插槽占用了一個將被釋放的指針,你必須給它一個指針,並放棄對它后面的 object 的控制(所以要么從一個你願意讓 go 的動態分配副本開始,要么進行動態分配從你不想讓 go 的東西中復制)。
而且我不確定為什么您認為沒有從 object 到指向該 object 的指針的轉換。我認為這在技術上是正確的,因為 class本身不提供轉換,但這確實是基本語言的一部分:
Type thing;
Type *pointerToThing = &thing;
這兩個問題都應該可以通過以下方式解決:
QVector<QPointF> points;
QPolygonF thisIsMyPoly = mapToScene(polygon());
QploygonF *thisIsPolyForFreeing = new QPolygonF(thisIsMyPoly);
emit editPolygon(points, thisIsPolyForFreeing);
您的信號仍然必須更改為使用指針而不是參考,希望這會減輕不匹配。
如果您的指針是指向無法復制的QPolygonF
的實際指針(因為它是指向QGraphicsScene
中保存的實際項目的指針,因此您需要原始指針來刪除它),我認為您應該能夠通過指針原樣,假設mapToScene()
返回對它的引用而不是副本:
QPolygonF poly = mapToScene(polygon()); // get ref.
emit editPolygon(points, &poly); // pass ref's address.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.