gpt4 book ai didi

c++ - 如何从 QGraphicsView 中检索选定区域?

转载 作者:行者123 更新时间:2023-11-30 04:05:03 24 4
gpt4 key购买 nike

我需要我的 QGraphicsView 对用户选择使用react——也就是说,当用户选择其中的区域时更改显示。我该怎么做?

据我所知,Qt Graphics 框架中的选择通常是通过项目选择来进行的。除了 QGraphicsVliew::rubberBandSelectionMode,我还没有找到涉及选定区域的任何方法/属性。 , 这没有帮助。

最佳答案

在查阅了一些文档之后,我找到了不同的解决方案。

QGraphicsView 中有一个 rubberbandChanged信号,其中仅包含我想使用的信息。所以,我在一个插槽中处理它,导致处理程序具有以下形式:

void 
MyImplementation::rubberBandChangedHandler(QRect rubberBandRect, QPointF fromScenePoint, QPointF toScenePoint)
{
// in default mode, ignore this
if(m_mode != MODE_RUBBERBANDZOOM)
return;

if(rubberBandRect.isNull())
{
// selection has ended
// zoom onto it!
auto sceneRect = mapToScene(m_prevRubberband).boundingRect();
float w = (float)width() / (float)sceneRect.width();
float h = (float)height() / (float)sceneRect.height();

setImageScale(qMin(w, h) * 100);
// ensure it is visible
ensureVisible(sceneRect, 0, 0);

positionText();
}

m_prevRubberband = rubberBandRect;
}

澄清一下:我的实现放大了所选区域。为此,类包含名为 m_prevRubberbandQRect。当用户停止用橡皮筋选择时,参数rubberBandRect为空,可以使用保存的矩形值。

在相关说明中,要在不干扰橡皮筋处理的情况下处理鼠标事件,m_prevRubberband 可以用作标志(通过检查它是否为空)。但是,如果处理了 mouseReleaseEvent,则必须在调用默认事件处理程序之前执行检查,因为它会将 m_prevRubberband 设置为空矩形。

关于c++ - 如何从 QGraphicsView 中检索选定区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23466245/

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