如何使qgraphicsitem动态移动/不可移动?

时间:2014-10-17 06:32:27

标签: qt qgraphicsitem

我有很多qgraphicsitem,我想使用一个复选框来设置这些qgraphicsitem是否可移动。 我现在唯一可以考虑的是为每个qgraphicsitem使用setFlag(ItemIsMovable)并使用复选框中的信号来触发它。 有没有更好更有效的方法呢?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,则每个QGraphicsItem都有特殊的唯一QComboBox

所以,当你有很多项目时,你可以QSignalMapper或尝试下一步(有很多方法可以做到这一点,我用小代码举例说明):

QList<QPair<QCheckBox*,QGraphicsItem*> > pair;
//fill your list with all QCheckBox and QGraphicsItem pointers which you need

//do connection for each QCheckBox
for(int i = 0; i <pair.size(); i++)
{
    pair.at(i).first->setObjectName(QString::number(i));//it is a trick, objectName is our position in list
    connect(pair.at(i).first,SIGNAL(stateChanged(int)),SLOT(myslot()));
}

在myslot中:

int index = sender()->objectName().toInt();
if(pair.at(index).first->isChecked())
   pair.at(index).second->setFlags(QGraphicsItem::ItemIsMovable);//movable
else
    pair.at(index).second->setFlags(pair.at(index).second->flags() & ~QGraphicsItem::ItemIsMovable );//not movable

你不应该手工编写每个连接等最重要的事情,你可以在程序中执行此操作。你可以做一些稍微不同的事情,但我告诉你如何用~10行做这个,这是可能的。