C ++如何枚举QGraphicsItem' s?

时间:2014-12-29 19:49:29

标签: c++ qt

使用此功能,我可以从QGraphicsItem中删除选定的QGraphicsView。 如何获取枚举的省略号以便接收"Deleted ellipse n°..."之类的通知。

void MainWindow::deleteItem()
{
        foreach (QGraphicsItem *item, scene->selectedItems()) {
            if (item->type() == ellipse->Type) {
                scene->removeItem(item);
                delete item;
                QMessageBox::information(this,"Notification", "Deleted");
            }
        }

}

1 个答案:

答案 0 :(得分:2)

一些方法

假设您只关心该迭代:

   int ix = 0; // add this
   foreach (QGraphicsItem *item, scene->selectedItems()) {
        if (item->type() == ellipse->Type) {
            scene->removeItem(item);
            delete item;
            std::cout << "Deleted ellipse number " << ix++ << std::endl; // and add this
            QMessageBox::information(this,"Notification", "Deleted");
        }
    }

以上仅适用于您的排序仅对应于foreach()循环的情况。如果您的商品有任意顺序:

std::unordered_map<QGraphicsItem*, int> mGraphicsItems;

当然,假设您可以填充它。如果可以,请在调用delete()之前执行查找,以获取枚举值。虽然不是很优雅,但增加了空间。

其他方法是继承QGraphicsItem [未经测试的代码,但你明白了]

class MyGraphicsItem : public QGraphicsItem
{
    Q_OBJECT
public:
     // snip
    int index() const { return mIndex; }
    void setIndex( int i ) { mIndex = i; }
private:
    int mIndex;
};

只需在创建QGraphicsItem时以任何方式设置索引,在调用delete之前,使用item-&gt; index()打印出(或做任何事情);