han*_*dle 1 c++ qt scrollbar qgraphicsview
QGraphicsView::fitInView()似乎忽略了滚动条的存在,滚动条显然是重叠的。(它还使用硬编码的 2 像素边距。)
有一个相关的错误报告 ( https://bugreports.qt-project.org/browse/QTBUG-1047 ) 指出调用 fitInView() 两次可以解决问题。
就我而言,它没有。仅手动触发它两次适合滚动条。这不起作用:
void myGraphicsView::mousePressEvent(QMouseEvent *event) {
if( event->button() == Qt::LeftButton ) {
QGraphicsItem* clicked = scene()->itemAt( mapToScene( event->pos() ) );
qDebug() << clicked << clicked->boundingRect();
fitInView( clicked, Qt::KeepAspectRatio);
fitInView( clicked, Qt::KeepAspectRatio); // doesn't work for me
QGraphicsView::mousePressEvent(event);
return;
}
}
Run Code Online (Sandbox Code Playgroud)
还有其他解决方法吗?
Qt 4.8.1 与 MSVC2010
小智 6
调用 fitInView() 两次确实有效,但您必须让 Qt 在两次调用之间处理其事件。
这也意味着您最终会重绘图形视图两次。
为了避免这种情况,我所做的是:
在您的代码中,它看起来像这样:
bool updateState = updatesEnabled();
setUpdatesEnabled(false);
fitInView(clicked, Qt::KeepAspectRatio);
QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
fitInView(clicked, Qt::KeepAspectRatio);
setUpdatesEnabled(updateState);
Run Code Online (Sandbox Code Playgroud)