2014-10-17 42 views
0

我有很多qgraphicsitem,我想用复选框来设置这些qgraphicsitem是否可移动。 我现在唯一能想到的就是为每一个qgraphicsitem使用setFlag(ItemIsMovable),并使用复选框中的信号来触发它。 有没有更好更有效的方法来做到这一点?如何使qgraphicsitem动态移动/不可移动?

回答

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行来做到这一点,这是可能的。