我試圖在 QGraphicsScene 上繪制一個 10 像素半徑的圓,該圓錨定在中心并且在場景縮放時不會變換(改變大小)。
我曾嘗試將 QGraphicsEllipseItem 與 QGraphicsItem::ItemIgnoresTransformations 標志一起使用,但在縮放場景時它仍然會發生變換。
這對于標準圖形專案是否可行,還是我需要創建自己的并手動執行繪制事件?
uj5u.com熱心網友回復:
以下代碼執行我認為您正在尋找的內容。它創建了一個 10 像素的不可變圓圈,將自身錨定到場景的中心,以及 10 個更大的、可移動的圓圈,這些圓圈服從應用的縮放變換......
#include <iostream>
#include <QApplication>
#include <QGraphicsEllipseItem>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QPainter>
int main (int argc, char **argv)
{
QApplication app(argc, argv);
QGraphicsView view;
QGraphicsScene scene;
view.setScene(&scene);
QGraphicsEllipseItem immutable(0, 0, 20, 20);
immutable.setFlag(QGraphicsItem::ItemIgnoresTransformations);
immutable.setPen(Qt::NoPen);
immutable.setBrush(Qt::blue);
scene.addItem(&immutable);
QObject::connect(&scene, &QGraphicsScene::sceneRectChanged,
[&](const QRectF &rect)
{
immutable.setPos(rect.center() - 0.5 * immutable.boundingRect().center());
});
for (int i = 0; i < 10; i) {
auto *e = new QGraphicsEllipseItem(20, 20, 50, 50);
e->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
scene.addItem(e);
}
view.show();
view.setTransform(QTransform::fromScale(5, 2));
return app.exec();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/429958.html
上一篇:QTEXE執行失敗
