gpt4 book ai didi

c++ - Qt QGraphicsScene 不适合带有滚动条的 InView()

转载 作者:太空宇宙 更新时间:2023-11-04 16:15:58 25 4
gpt4 key购买 nike

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;
}
}

还有其他解决方法吗?

Qt 4.8.1 与 MSVC2010

最佳答案

调用 fitInView() 两次确实有效,但您必须让 Qt 在两次调用之间处理它的事件。

这也意味着您最终需要重绘图形 View 两次。

为了避免这种情况,我所做的是:

  1. 禁用更新
  2. 调用 fitInView
  3. 调用 QApplication::processEvents()
  4. 再次调用 fitInView
  5. 启用更新

在你的代码中它看起来像这样:

bool updateState = updatesEnabled();
setUpdatesEnabled(false);
fitInView(clicked, Qt::KeepAspectRatio);
QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
fitInView(clicked, Qt::KeepAspectRatio);
setUpdatesEnabled(updateState);

关于c++ - Qt QGraphicsScene 不适合带有滚动条的 InView(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22614337/

25 4 0
文章推荐: C++乐透号码生成器
文章推荐: jQuery 或 CSS 问题?
文章推荐: C++刽子手游戏
文章推荐: c++ - 打印 std::vector 的平均值
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com