QAbstractItemView区分单双击
系统不可能知道你这一次单击鼠标是为了双击指令,所以在你第一次按下鼠标时,系统会发出一个WM_XBUTTONDOWN(也就是clicked),
当你第二次单击鼠标时,系统先发送WM_XBUTTONDOWN,然后发现距离上一次单击鼠标间隔不到N毫秒(注册表中设置),于是发出双击消息,程序收到消息,调用doubleClicked
QWidget中一次双击只会触发一次单击和一次双击事件。
而在QAbstractItemView中,如果设置void setEditTriggers ( EditTriggers triggers ) 禁用了双击鼠标编辑功能,则:
一次双击中调用次序是clicked、doubleClicked、clicked。
解决双击会触发两次单击,方法:
https://wenku.baidu.com/view/7a6e9b5d03d8ce2f01662342.html
#include "testclick.h"
#include <qdebug.h>
#include <QKeyEvent>
#include <QStringListModel> TestClick::TestClick(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this); m_pTimer = new QTimer(this);
m_bDouble = false; QStringList leaders;
leaders<<"qq"<<"aa"<<"zz"<<"ww"<<"ss"<<"xx";
QStringListModel *model = new QStringListModel();
model->setStringList(leaders);
ui.listView->setModel(model);
ui.listView->setEditTriggers(QAbstractItemView::NoEditTriggers); connect(ui.listView,SIGNAL(clicked(const QModelIndex&)),this, SLOT(slot_click(const QModelIndex&)));
connect(ui.listView,SIGNAL(doubleClicked(const QModelIndex&)),this, SLOT(slot_DbClick(const QModelIndex&)));
connect(m_pTimer, SIGNAL(timeout()),this, SLOT(slot_timeOut())); } TestClick::~TestClick()
{ } void TestClick::slot_click(const QModelIndex& mi)
{
//qDebug() << "slot_click";
if (!m_bDouble)
{
m_pTimer->start();
} m_bDouble = false;
} void TestClick::slot_DbClick(const QModelIndex& mi)
{
//qDebug() << "slot_DbClick";
m_bDouble = true;
m_pTimer->stop(); this->run_DbClick();
} void TestClick::slot_timeOut()
{
if (!m_bDouble)
{
this->run_Click();
}
} //单击调用
void TestClick::run_Click()
{ } //双击调用
void TestClick::run_DbClick()
{ }
QAbstractItemView区分单双击的更多相关文章
- WinForm中DataGridView的使用(四) - 区分单双击事件
虽然DataGridView单双击事件都有,但双击事件其实也会触发单击事件的处理,所以如果双击事件和单击事件的行为不同,或者双击时不想触发单击事件,或者单击事件会阻塞双击事件的处理时(比如单击后会有弹 ...
- js中字符串的replace方法区分单双引号
今天遇到一问题,js文件中调用字符串的replace方法,不起作用. 后来排查可能觉得replace("<option value='1'>admin</option&g ...
- JQuery如何实现双击事件时不触发单击事件,解决鼠标单双击冲突问题
在jQuery的事件绑定中,如果元素同时绑定了单击事件(click)和双击事件(dblclick),那么执行单击事件(click)时,不会触发双击事件(dblclick), 执行双击事件(dblcli ...
- jQuery解决鼠标单双击问题
html代码如下: <button>点击</button> JQ代码如下: <script> $(function () { // 编写相关jQuery代码 // ...
- JQuery解决鼠标单双击冲突问题
转自链接:https://www.shuzhiduo.com/A/xl560MKrzr/ 在jQuery的事件绑定中,如果元素同时绑定了单击事件(click)和双击事件(dblclick),那么执行单 ...
- (转) Windows如何区分鼠标双击和两次单击
Windows如何区分鼠标双击和两次单击 http://lbsloveldm.blog.hexun.com/12212875_d.html 在Windows平台上,鼠标左键的按下.松开.快速的两次点击 ...
- js区分鼠标单双击 阻止事件冒泡
function clickOrDblClick(obj) { count++; if (obj != undefined) { var rowStr = $.trim($(obj).find(&qu ...
- (转)MFC:Windows如何区分鼠标双击和两次单击
在Windows平台上,鼠标左键的按下.松开.快速的两次点击会产生WM_LBUTTONDOWN.WM_LBUTTONUP和WM_LBUTTONDBLCLK消息,但是Windows根据什么来区分连续的两 ...
- iOS UIButton单双击处理响应不同的方法
//显示目标 双击显示当前用户坐标位置 UIButton * btnShowDistination = [[UIButton alloc]initWithFrame:CGRectMake(, SCRE ...
随机推荐
- Unity--game
打怪兽--头像状态 Git :https://github.com/vinieo/attck 打怪兽--背景音乐音量 Git :https://github.com/vinieo/ack_bgm 小球 ...
- 学习笔记10—Python 绘图集
ordered_data = np.load('ordered_data_just_TD_mae.npy')results = pd.Series(np.squeeze(np.load('result ...
- ftp服务器搭建(离线安装vsftpd),配置
1.下载vsftp:http://rpmfind.net/linux/rpm2html/search.php?query=vsftpd(x86-64) 2.检查是否已经安装了vsftp rpm -qa ...
- C#读取Excel表格的数据
1.创建工程后,需要下载 EPPlus.dll 添加到工程中,这里有一个下载地址:https://download.csdn.net/download/myunity/10784634 2.下面仅实现 ...
- linux下安装nginx以及常用命令指南
安装nginx之前,要先在服务器上安装nginx运行所需要的依赖包 目录选择:一般选择 "/usr/local/" 1.安装PCRE库 离线安装包:https://pan.baid ...
- (转)c# control.Invoke control.BeginInvoke
在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate. 一.为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是do ...
- 雷林鹏分享:服务器上的 XML
服务器上的 XML XML 文件是类似 HTML 文件的纯文本文件. XML 能够通过标准的 Web 服务器轻松地存储和生成. 在服务器上存储 XML 文件 XML 文件在 Internet 服务器上 ...
- 2019/01/17 基于windows使用fabric将gitlab的文件远程同步到服务器(git)
觉得django项目把本地更新push到gitlab,再执行fabric脚本从gitlab更新服务器项目挺方便的,当然从本地直接到服务器就比较灵活. 2019/01/17 基于windows使用fab ...
- 机器学习ML策略
1.为什么是ML策略 例如:识别cat分类器的识别率是90%,怎么进一步提高识别率呢? 想法: (1)收集更多数据 (2)收集更多的多样性训练样本 (3)使用梯度下降训练更长时间 (4)尝试Adam代 ...
- Maxim and Array CodeForces - 721D (贪心)
大意: 给定序列, 每次操作选择一个数+x或-x, 最多k次操作, 求操作后所有元素积的最小值 贪心先选出绝对值最小的调整为负数, 再不断选出绝对值最小的增大它的绝对值 #include <io ...