- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道如何让 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/
如何使用正则表达式忽略或过滤 centeron_plugins.pl 结果的部分内容? 实际例子: 我正在尝试监视所有 Linux 服务器 (RHEL 6) 上的 inode ,因此我使用以下命令:
我不知道如何让 centerOn() 围绕项目移动视口(viewport)(或围绕端口的项目,不确定它是哪个方向)。 以下代码在 main 中有效: view.setDragMode(QGraphic
我正在尝试使用 CraftyJS 框架制作 2D JavaScript 游戏。但我坚持使用“centerOn”功能。 代码如下:http://jsfiddle.net/R8ND7/17/ Crafty
我打算在 QGraphicsView 上进行平移/缩放操作. 所以我阅读了 QGraphicsView 的文档并查看一些实用函数,如 ensureVisible()和 centerOn() . 我想我
我是一名优秀的程序员,十分优秀!