Qt鼠标行为设置

QT官网介绍:

QStyleHints Class | Qt GUI | Qt Documentation (Pro)

1 鼠标双击间隔时间设置

  1. 查看当前的双击间隔时间,单位 ms

qApp->styleHints()->mouseDoubleClickInterval()

  1. 设置双击间隔时间

qApp->styleHints()->setMouseDoubleClickInterval(int) <br />

<a name="FPqvG"></a>

2 鼠标双击范围设置

  1. 双击实现原理

在Qt中,鼠标的双击范围是在 qguiapplication中的鼠标处理事件函数中确认.

/* qguiapplication.cpp */
void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent *e)
{
    .........
    if (mouseMove) {
        QGuiApplicationPrivate::lastCursorPosition = globalPoint;
        if (qAbs(globalPoint.x() - mousePressX) > mouse_double_click_distance||
            qAbs(globalPoint.y() - mousePressY) > mouse_double_click_distance)
            mousePressButton = Qt::NoButton;
    }
    ......
}

这段代码先获取第二次按下鼠标时的位置(xy), 然后再与第一次按下鼠标的位置进行比较; 如果x坐标或y坐标上的距离大于 mouse_double_click_distance值, 则认为不是双击,将其当代单击处理;如果在 mouse_double_click_distance值范围内,则当作双击处理.<br />
<br />这里的 mouse_double_click_distance变量,只在Qt图形程序启动的时候进行初始化, 后续无法再改变该值.

/* qguiapplication.cpp */
void QGuiApplicationPrivate::init()
{
    ......
    mouse_double_click_distance = platformTheme()->themeHint(QPlatformTheme::MouseDoubleClickDistance).toInt();
    ......
}

这里通过获取平台主题的 MouseDoubleClickDistance信息来赋值. 而MouseDoubleClickDistance信息又是在平台主题初始化时获取到,代码如下:

/* qplatformtheme.cpp */
QVariant QPlatformTheme::defaultThemeHint(ThemeHint hint)
{
    ......
    case MouseDoubleClickDistance:
        {
            bool ok = false;
            const int dist = qEnvironmentVariableIntValue("QT_DBL_CLICK_DIST", &ok);
            return QVariant(ok ? dist : 5);
        }
    ......
}

可以看到是通过获取 QT_DBL_CLICK_DIST环境变量获取的;如果该变量没有,会给出默认值 5 .<br />

  1. 查看鼠标双击的设置范围<br />

由上面的分析可以看出, 在Qt中是通过"QT_DBL_CLICK_DIST"环境变量来设置鼠标双击范围.所以也可以通过该环境变量来查看鼠标双击的范围值: qgetenv("QT_DBL_CLICK_DIST").toInt();

  1. 设置鼠标的双击范围

这个代码 qputenv("QT_DBL_CLICK_DIST", QByteArray::number(30)) 为设置鼠标范围值.

注意: 要在Qt初始化之前设置该值,才会生效.

摘自:

作者:Jake_Yang
链接:https://www.jianshu.com/p/92f5544a1acf/
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值