2014-10-17 41 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行來做到這一點,這是可能的。