1 鼠标双击间隔时间设置
- 查看当前的双击间隔时间,单位
ms
qApp->styleHints()->mouseDoubleClickInterval()
- 设置双击间隔时间
qApp->styleHints()->setMouseDoubleClickInterval(int)
<br />
<a name="FPqvG"></a>
2 鼠标双击范围设置
- 双击实现原理
在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 />
- 查看鼠标双击的设置范围<br />
由上面的分析可以看出, 在Qt中是通过"QT_DBL_CLICK_DIST"环境变量来设置鼠标双击范围.所以也可以通过该环境变量来查看鼠标双击的范围值: qgetenv("QT_DBL_CLICK_DIST").toInt();
- 设置鼠标的双击范围
这个代码 qputenv("QT_DBL_CLICK_DIST", QByteArray::number(30))
为设置鼠标范围值.
注意: 要在Qt初始化之前设置该值,才会生效.
网友评论