美文网首页
Qt鼠标行为设置

Qt鼠标行为设置

作者: Jake_Yang | 来源:发表于2020-04-13 10:32 被阅读0次

    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初始化之前设置该值,才会生效.

    相关文章

      网友评论

          本文标题:Qt鼠标行为设置

          本文链接:https://www.haomeiwen.com/subject/vrtgmhtx.html