![](/img/trans.png)
[英]Qt Removing a QGraphicsItem from QGraphicsScene with singleShot Timer?
[英]Problems removing custom Qgraphicsitem from Qgraphicsscene
我已經將Qgraphicsscene和Qgraphicsitem分類,似乎它有效,但嘗試通過子類識別刪除項目不起作用。 這刪除項目:
void debugSceneItemscuatrobis()
{
QList<QGraphicsItem *> allitems = items();
foreach(auto item, allitems) {
removeItem(item);
}
}
但事實並非如此,它承認有些物品但不會移除它們,嘗試不同的擁有但卻無法使其有效。
void debugSceneItemscuatrotris()
{
QList<QGraphicsItem *> allitems = items();
foreach(auto item, allitems) {
if(item->type() == chord::Type) {
removeItem(item);
delete item;
}
}
}
這就是qgraphicsitem子類添加項目的方式:
void chord::addchord(QPointF sp)
{
scene()->addLine(sp.x(), sp.y(), sp.x()+10, sp.y()+10);
QList<int> midics = {10, 30, 40};
for(int i = 0; i < midics.length(); i++)
{
QGraphicsSimpleTextItem *item = new QGraphicsSimpleTextItem("n");
item->setFont(QFont("omheads", 20));
item->setPos(sp.x(), sp.y()+midics[i]);
scene()->addItem(item);
coso.append(item);
}
}
對不起,我是新手,沒有程序員,這些是我的第一個子類。 有人知道如何接近它嗎? 謝謝。 :-)
沒有看到更多的代碼,我只是在猜測。 但是那個猜測就是當你刪除一個chord
類型的項目時,你仍然可以看到在chord::addchord
中添加到場景中的各種QGraphicsItem
。 如果是這樣,可能是因為chord
與那些項之間缺少任何父/子關系:來自QGraphicsScene::removeItem(item)
的文檔......
從場景中刪除項目項及其所有子項 。
嘗試通過更改chord:addchord
顯式創建父/子關系chord:addchord
實現到...
void chord::addchord (QPointF sp)
{
auto *line = scene()->addLine(sp.x(), sp.y(), sp.x() + 10, sp.y() + 10);
line->setParentItem(this);
QList<int> midics = { 10, 30, 40 };
for (int i = 0; i < midics.length(); i++)
{
QGraphicsSimpleTextItem *item = new QGraphicsSimpleTextItem("n", this);
item->setFont(QFont("omheads", 20));
item->setPos(sp.x(), sp.y() + midics[i]);
scene()->addItem(item);
coso.append(item);
}
}
它可能無法解決所有問題,但應該(希望)引導您朝着正確的方向前進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.