我有QGraphicsItems
在QGraphicsScene
上。我需要將他們分組。分組的主要原因:我需要提供一種在組上應用轉換的方法。QGraphicsItemGroup在轉換期間移動
這一切都非常簡單,如果我需要應用一個單一的變換,而邊界矩形左上角的項目是在0,0。
我已經看到了分組和取消分組是如何工作的,保持項目相對於場景的轉換,這很好。但在分組時,無論我的物品有什麼位置,該組都有座標(0,0)。
當我嘗試任何轉換時,無論我用轉換原點嘗試了什麼,該項目都會移動。
簡單的程序,以顯示:
#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsRectItem>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QGraphicsScene s;
QGraphicsView view(&s);
s.setSceneRect(90, -10, 420, 140);
view.show();
QGraphicsRectItem* sceneR = new QGraphicsRectItem(s.sceneRect());
s.addItem(sceneR);
QTransform t; // simple scaling transform
t.scale(2, 1); // adding rotation scares me
QGraphicsRectItem* r0 = new QGraphicsRectItem(QRectF(0, 0, 150, 100)); // for compare, not scaled
r0->setBrush(QBrush(Qt::red));
r0->setPos(100, 0);
s.addItem(r0);
QGraphicsRectItem* r1 = new QGraphicsRectItem(QRectF(0, 0, 150, 100)); // for compare, not scaled
r1->setBrush(QBrush(Qt::blue));
r1->setPos(100, 10);
s.addItem(r1);
QGraphicsRectItem* r2 = new QGraphicsRectItem(QRectF(0, 0, 150, 100)); // will make a group of a single item
r2->setFlags(QGraphicsItem::ItemIsSelectable);
r2->setBrush(QBrush(Qt::green));
r2->setPos(100, 20);
r2->setSelected(true);
s.addItem(r2);
QGraphicsItemGroup* g = s.createItemGroup(s.selectedItems());
// QPointF topLeft = g->mapToScene(g->boundingRect().topLeft());
// g->setTransformOriginPoint(topLeft);
r1->setTransform(t);
g->setTransform(t);
qDebug() << r1->pos() << r1->transform();
qDebug() << g->pos() << g->transform();
return app.exec();
}
如果我申請轉換,分組項目移動。我一直無法弄清楚邏輯或如何補償。
(紅色=基準,不進行縮放;藍色,參考,縮放;綠色,分組和縮放)
在圖像上方我期望綠色矩形具有相同的x座標作爲藍色(I垂直移動以查看發生了什麼)
如何使我的縮放(和旋轉)到位? (我正在考慮設置一個共同的父母,並執行所有的工作來檢索項目轉換,但不知道如何正確地結合它們,尤其是擴大一個小組如何找到新的位置和新的規模的替代方案內部項目)
太棒了!非常感謝。 – FlKo