gpt4 book ai didi

c++ - QT鼠标事件处理问题

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

大家好

如图所示

http://i51.tinypic.com/2r56s1j.jpg

我在 QScrollBar 中有一个扩展的 QWidget 对象(它绘制单元格图像和一些计数数据)。用户可以使用鼠标滚轮放大/缩小图像(QWidget 大小根据 QImage 的缩放大小而改变)。

我通过在 QWidget 中实现监听器方法来处理事件(mouseMoveEvent()、wheelEvent()..等)。我的问题是,当鼠标指针位于 QWidget 上时,我只能执行缩放(和其他事件)。如果鼠标点在 QScrollBar(图像中的灰色区域)上方,则这些事件由 QScrollBar 消耗。

任何提示,

[编辑]抱歉,我指的是 QScrollArea,而不是 QScrollBar。

谢谢,乌漫画

最佳答案

我不确定您是希望滚轮用于缩放图像,还是希望滚轮在图像小于滚动区域视口(viewport)时控制缩放,并且当图像大于滚动区域视口(viewport)时,然后使用滚轮进行滚动。在任何一种情况下,您都应该能够通过以下方式自定义轮子的处理方式:

因为我还没有真正尝试过这个,所以我不确定它是否会起作用。希望是,如果您安装事件过滤器并在事件上设置忽略,该事件仍将传播回您的图像小部件。这将允许您在图像小部件中完整保留当前的鼠标处理。

bool YourImageWidget::eventFilter(QObject *obj, QEvent *event)
{
if((obj == scrollAreaPointer) && (event->type() == QEvent::Wheel))
{
if(!scrollAreaShouldHandleWheel)
{
event->ignore();
}
}
return false; // always pass the event back to the scroll area
}

scrollAreaShouldHandleWheel 标志是一个 bool 值,您可以根据您是否希望滚动区域处理滚轮事件从图像小部件中设置它。

在代码中的某处,您可以将图像小部件安装为滚动区域的事件过滤器。

scrollArea->installEventFilter(imageWidget);

如果这不起作用,您始终可以使用此过滤器来确保您的小部件获取事件并直接处理它,然后返回 true,这样滚动区域将无法接收事件。

关于c++ - QT鼠标事件处理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3723011/

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