背景:最近在使用自绘控件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函数中进行设置。