本文介绍: 在做客户端UI程序时,鼠标右键弹出菜单这种操作非常常见,一般在鼠标右键按下或者鼠标右键抬起事件响应操作显示菜单即可,但是有时涉及到鼠标移动就是鼠标按下右键移动时,则不需要弹出菜单,其它时候正常弹出。这种情况有很多实现方式,但是操作体验上,差别较大,下面记录一种实现方案

1.概述

在做客户端UI程序时,鼠标右键弹出菜单这种操作非常常见,一般在鼠标右键按下或者鼠标右键抬起事件响应操作显示菜单即可,但是有时涉及到鼠标移动就是鼠标按下右键且移动时,则不需要弹出菜单,其它时候正常弹出。这种情况有很多实现方式,但是操作体验上,差别较大,下面记录一种实现方案

2.实现方案

目标实现流畅的鼠标右键弹出菜单操作,当鼠标右键按下且移动时,不弹出菜单

2.1 实现思路

开启一个定时器 timer设置定时器触发超时200ms设置定时器超时响应函数RightClickFun函数中设置右键弹窗标识 boolFlagfalse),在鼠标右键按下时启动定时器,并设置一个右键弹窗标识 boolFlagtrue,在鼠标右键弹起时,如果右键弹窗标识 boolFlagtrue停止定时器显示右键弹窗,否则不显示弹窗。大致意思就是如果鼠标右键按下超过200ms,则判定为其它操作,不弹窗,小于200ms则弹窗。

2.2 QT实现示例

此处c++ QT做一个简单示例,其它的UI界面原理是一样的

Qtimer* m_rClickTimer=new QTimer(this);
m_rClickTimer->setSingleSlot(true);
connect(m_rClickTimer,SIGNAL(timeout()),this,SLOT(OnRightClick()));

//鼠标按键按下事件响应
void TestWidget::mousePressEvent(QMouseEvent *event)
{
    if(event->button == Qt::RightButton)
    {    
        m_rClickTimer->start(200);
        m_rFlag=true;
    }
}

//鼠标按键抬起事件响应
void TestWidget::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button == Qt::RightButton)
    {
         if(m_rFlag)
        {
             m_rightPopMenu->move(QCursor::pos);
             m_rightPopMenu->show();
        }   
    }
}

//定时超时响应函数
void TestWidget::TestWidget()
{
    m_rFlag=false;
}

原文地址:https://blog.csdn.net/qq_22642239/article/details/134812567

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_47346.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注