如何禁用qgraphicsitem的多重选择?

时间:2014-10-06 20:36:20

标签: c++ qt qgraphicsitem

我是Qt的新手。似乎多次选择qgraphicsitem的默认设置是按ctrl按钮。 但是可以禁用此功能吗?或者重新加载这个功能?

2 个答案:

答案 0 :(得分:3)

这是由项目的标志控制的。要禁用特定项目的选择,请执行

item->setFlag(QGraphicsItem::ItemIsSelectable, false);

如果您想完全禁用QGraphicsScene的项目,无论项目标记如何,我建议您将QGraphicsScene::selectionChanged连接到QGraphicsScene::clearSelection

如果您想禁用多项选择,我建议如下:

  • 子类QGraphicsScene并将指针lastSelection保存到QGraphicsItem
  • 创建连接到QGraphicsScene::selectionChanged
  • 的广告位
  • 检查selectedItems
    • 它是空的:无事可做(=没有选择)
    • 仅包含lastSelection:无所事事(=选择没有真正改变)
    • 包含一项,而不是lastSelection:将lastSelection设置为该项目(=首次选择的一项)
    • 包含两项:一项必须为lastSelection。从选择中删除该内容(lastSelection->setSelected(false);),将lastSelection设置为剩余项目。 (=选择了另一个项目,将选择移动到它)

您可能需要在修改插槽内的选择期间阻止信号。

答案 1 :(得分:2)

禁用多项选择的简单方法是:

  1. QGraphicsItem创建您自己的Dirived类。
  2. 重载受保护的mousePressEvent功能并禁用ControlModifier

    protected:
        void YourOwnQGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) Q_DECL_OVERRIDE
        {
            if(mouseEvent->modifiers() & Qt::ControlModifier)
            {
                mouseEvent->ignore();
            }
            else
            {
                QGraphicsItem::mousePressEvent(mouseEvent);
                //Do what you want...
            }
        }