【发布时间】:2014-04-18 04:38:09
【问题描述】:
我不知道如何让 centerOn() 移动项目周围的视口(或端口周围的项目,不确定它是哪种方式)。
以下代码在 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);
}
我错过了什么? 谢谢
亚历克斯
【问题讨论】:
-
尝试重新实现函数drawForeground而不是paintEvent。这是您在视图中弄乱事物的通常方式。我猜想在paintEvent 运行时没有绘制视图,因此坐标 30.0 和 50.0 不是有效的
-
抱歉没有早点回复。今晚我会检查一下,然后告诉你。谢谢。
标签: qt centering qgraphicsview qgraphicsitem qgraphicsscene