美文网首页
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