0
我有很多qgraphicsitem,我想用複選框來設置這些qgraphicsitem是否可移動。 我現在唯一能想到的就是爲每一個qgraphicsitem使用setFlag(ItemIsMovable),並使用複選框中的信號來觸發它。 有沒有更好更有效的方法來做到這一點?如何使qgraphicsitem動態移動/不可移動?
我有很多qgraphicsitem,我想用複選框來設置這些qgraphicsitem是否可移動。 我現在唯一能想到的就是爲每一個qgraphicsitem使用setFlag(ItemIsMovable),並使用複選框中的信號來觸發它。 有沒有更好更有效的方法來做到這一點?如何使qgraphicsitem動態移動/不可移動?
如果我正確理解,每個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行來做到這一點,這是可能的。