gpt4 book ai didi

qt - QGraphicsView->centerOn() 不起作用

转载 作者:行者123 更新时间:2023-12-04 04:16:43 31 4
gpt4 key购买 nike

我不知道如何让 centerOn() 围绕项目移动视口(viewport)(或围绕端口的项目,不确定它是哪个方向)。

以下代码在 main 中有效:

view.setDragMode(QGraphicsView::ScrollHandDrag);
view.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view.setFrameStyle(QFrame::NoFrame);
view.showFullScreen();

QGraphicsPixmapItem *pmItem = new QGraphicsPixmapItem(pixMap);
scene.addItem(pmItem);

view.centerOn(QPointF(50,30));
view.show();
rc = qA.exec();

但是,当我尝试从重载的 QGraphicsView 的 paintEvent() 执行相同操作时,centerOn() 什么也不做:

class MyView :: public QGraphicsView { ... }

void MyView::init(){
...
setDragMode(QGraphicsView::ScrollHandDrag);
setFrameStyle(QFrame::NoFrame);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

_scene.clear();
setScene(&_scene);

super::showNormal();

}


void MyView::paintEvent(QPaintEvent *aEvent){
_scene.clear();
QGraphicsPixmapItem *pmItem = new QGraphicsPixmapItem(pixMap);
_scene.addItem(pmItem);
centerOn(QPointF(50.0, 30.0));

super::paintEvent(aEvent);
}

我错过了什么?谢谢

亚历克斯

最佳答案

您基本上是在 paintEvent 调用下拉地毯。

QGraphicsView 通过信号和槽的方式与QGraphicsScene 通信。场景没有机会通知 View 刚刚添加了一个新项目,因为实际的 paintEvent 是在创建后立即调用的。两个步骤之间没有事件循环过程。所以 paintEvent 调用没有为新项目正确设置,更不用说居中更改了。

一旦绘画完成, View 就会被验证并认为它已经全部画完了。所以它永远不会更新新项目的区域。

在任何绘画或更新事件之外调用 centerOn。

关于qt - QGraphicsView->centerOn() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12966137/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com