带QScroller的控件在高分辨率下出现点击内部控件无法响应问题

        背景:最近在使用自绘控件QtableView或QScrollArea时,在4k分辨率下使用,当控件的的滚动条出现后,会出现点击内部区域无响应的情况,如下图:

 出现这种情况是因为在点击过程中控件会将点击事件进行一个类似“截留”的操作,用以判断是否需要出发QScroller的滚动事件,然后就会导致上图的情况出现,解决此类问题需要用到QScrollerProperties这个类来设置控件属性。

官方解释:QScrollerProperties类存储QScroller的设置。

QScrollerProperties类存储QScroller使用的参数。

默认设置是平台相关的,因此Qt可以模拟动态滚动的平台行为。

按照约定,QScrollerProperties是以物理单位(米、秒)为单位的,QScrollerProperties使用当前的DPI进行转换。

//    将度量ScrollerMetric的具体值设置为value,
//    QScrollerProperties::MousePressEventDelay是在[s]中开始轻按手势时,
//    鼠标按下事件被延迟的时间。如果该手势在该时间内被触发,则不会向滚动对象发送鼠标按下或释放。
//    如果它在延迟之后触发,延迟的鼠标按下加上一个假释放事件在全局位置
//    QPoint(-QWIDGETSIZE_MAX, -QWIDGETSIZE_MAX)被发送。如果手势被取消,
//    那么延迟的鼠标按下和真正的释放事件都将被传递。所以需要将延时设置为0,将延时触发取消
      QScrollerProperties property;
      property.setScrollMetric(QScrollerProperties::MousePressEventDelay, 0.0);
//    将所有新的QScrollerProperties对象的滚动器属性设置为sp。
//    使用此函数可覆盖由默认构造函数返回的平台默认属性。如果您只想更改单个滚动条的滚动条属性,
//            请使用QScroller::setScrollerProperties()
//    注意:调用此函数不会更改已经存在的QScrollerProperties对象的内容。
      QScrollerProperties::setDefaultScrollerProperties(property);

如果需要对全局设置需要在main函数中进行设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值