C++ 如何禁用qgraphicsitem的多选功能?
我是新来的。似乎多次选择qgraphicsitem的默认设置是按ctrl键。C++ 如何禁用qgraphicsitem的多选功能?,c++,qt,qgraphicsitem,C++,Qt,Qgraphicsitem,我是新来的。似乎多次选择qgraphicsitem的默认设置是按ctrl键。 但是否可以禁用此功能?或者重新加载此功能?这由项目的标志控制。要禁用对特定项目的选择,请执行以下操作: item->setFlag(QGraphicsItem::ItemIsSelectable, false); 如果要完全禁用为qgraphicscene选择项目,而不考虑项目标志,我建议将qgraphicscene::selection更改为qgraphicscene::clearSelection 如果要禁
但是否可以禁用此功能?或者重新加载此功能?这由项目的标志控制。要禁用对特定项目的选择,请执行以下操作:
item->setFlag(QGraphicsItem::ItemIsSelectable, false);
如果要完全禁用为qgraphicscene
选择项目,而不考虑项目标志,我建议将qgraphicscene::selection更改为qgraphicscene::clearSelection
如果要禁用多重选择,我建议如下:
- 子类qgraphicscene并将指针
lastSelection
保留在QGraphicsSitem周围
- 创建一个连接到
qgraphicscene::selectionChanged
- 选中
selectedItems
:
- 它是空的:无事可做(=未选择任何内容)
- 仅包含
lastSelection
:无需执行(=选择未真正更改)
- 包含一个项目,而不是
lastSelection
:将lastSelection
设置为该项目(=第一次选择的一个项目)
- 包含两项:一项必须是
lastSelection
。从选择中删除该项(lastSelection->setSelected(false);
),将lastSelection
设置为剩余项。(=已选择另一项,请将所选内容移动到该项)
在修改插槽内的选择时,您可能需要阻止信号。禁用多个选择的简单方法是:
从QGraphicsItem
创建您自己的驱动类
过载受保护的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...
}
}
您好,但我仍然想保持正常的选择能力,我只想禁用多重选择…谢谢您的回答。对不起,在修改插槽内的选择时阻止信号的目的是什么?我不确定是谁在幕后处理选择。如果项目执行此操作,则在修改selectionChanged插槽中的选择时,可能会创建一个信号循环。因此,可能需要阻止信号。@dom0+1,但如果按照您描述的顺序进行检查,则无需阻止信号