簡體   English   中英

QObject::connect: 沒有這樣的信號錯誤 C++

[英]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中刪除的項目。

我的信號不能是指針,因為沒有從QPolygonFQPolygonF *的轉換,我需要QPolygonFmapToScene

我明白你在說什么,還有幾個問題。

如果你的插槽占用了一個將被釋放的指針,你必須它一個指針,並放棄對它后面的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM