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