[英]How to use the QGraphicsItem::setPos() function
我無法弄清楚QGraphicsItem
class 的setPos()
function 是如何工作的。
我的Rect
class 沒有父級,所以它的原點是相對於場景的。
在用鼠標移動矩形后,我嘗試將矩形放回 (0, 0),但根據我移動它的位置,它被放置在不同的位置。 我想這意味着場景的原點移動了,但是是什么導致了這種變化?
class Rect : public QGraphicsItem {
public:
Rect(): QGraphicsItem()
{
setFlag(ItemIsMovable);
}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
{
painter->drawRect(0, 0, 20, 20);
}
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
{
setPos(0, 0);
update();
QGraphicsItem::mouseReleaseEvent(event);
}
QRectF boundingRect() const
{
return QRectF(0, 0, 20, 20);
}
private:
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene scene;
QGraphicsView view(&scene);
Rect obj;
scene.addItem(&obj);
view.show();
return a.exec();
}
當您創建 QGraphicsView 時,您最初接受默認設置。 例如,標准設置是水平居中。
另一個因素是默認區域大小可能達到最大大小。
您可以為場景設置自定義大小。 您可以使用graphicsView->setSceneRect(0,0,300,300);
(例如)
scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
ui->graphicsView->setRenderHint(QPainter::Antialiasing);
ui->graphicsView->setSceneRect(0,0, 300,300);
rectItem = new QGraphicsRectItem(0,0, 100, 100);
rectItem->setPen(QPen(Qt::darkMagenta, 2));
rectItem->setBrush(QGradient(QGradient::SaintPetersburg));
rectItem->setPos(190,10);
scene->addItem(rectItem);
總而言之:如果您想使用固定值。 也許最好知道總大小。 (從你的代碼中不清楚,這就是我給出這個例子的原因)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.