zoukankan      html  css  js  c++  java
  • 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(120);
        }
    
        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()
    {
    
    }
  • 相关阅读:
    www.a.shifen.com
    gstack pstack strace
    性能分析 函数粒度 函数里的一条语句 汇编 反编译 机器指令 %rbx,%rbp
    taocrypt
    sign
    Python 3.8.0 final¶ Release date: 2019-10-14
    超线程
    Python classes to extract information from the Linux kernel /proc files.
    借助中间件优化代码 将请求RequestId在服务端接收到请求在处理业务逻辑之前生成
    JVM CPU Profiler技术原理及源码深度解析
  • 原文地址:https://www.cnblogs.com/zhangxuan/p/7765963.html
Copyright © 2011-2022 走看看