代码先锋网 代码片段及技术文章聚合

QTreeView使用总结6,单击双击的信号与事件

1,简介


上文介绍了选中信号的处理,本文继续介绍QTreeView的操作处理。

单击、双击的信号槽的写法,以及重写鼠标操作事件的一般方法。


2,单机双击信号响应


在QTreeView的父类QAbstractItemView内,定义了这一类视图控件的常用信号:

QAbstractItemView.h:

Q_SIGNALS:
    void pressed(const QModelIndex &index);
    void clicked(const QModelIndex &index);
    void doubleClicked(const QModelIndex &index);

    void activated(const QModelIndex &index);
    void entered(const QModelIndex &index);
    void viewportEntered();

    void iconSizeChanged(const QSize &size);

其中pressed、clicked、doubleClicked分别为按下、单击、双击,比较常用。


3,单击、双击、按键事件重写


上面的信号只能在单击双击操作发生时,进行一些额外的处理。

如果想拦截这些操作,进行判断来执行其他代码,可以继承QTreeView,重写这些事件。

QTreeView.h:

protected:
    void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
    void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
    void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
    void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

下面是鼠标按下的的重写示例:

void MyTreeView::mousePressEvent(QMouseEvent *e)
{
    if( e->button() == Qt::LeftButton )          //是否左键按下
    {
        QModelIndex index = indexAt(e->pos());  //取出按下点的元素索引index
        if( index.isValid() )                   //判断index是否有效
        {
            //你的处理
            QVariant data = index.data(Qt::UserRole+1);
        }
        
        
        //如果需要判断组合键,使用下面代码
        if(QApplication::keyboardModifiers () == Qt::ControlModifier)
        {
            //当前CTRL是否按下,根据需要加此情况
        }
        else if(QApplication::keyboardModifiers() == Qt::ShiftModifier)
        {
            //当前SHIFT是否按下,根据需要加此情况
        }
        else
        {
	    //只是左键按下,没有CTRL和SHIFT
            //你的处理...
        }
    }
}

其它事件处理函数写法类似。




版权声明:本文为dpsying原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dpsying/article/details/80073040

智能推荐

让WinForm控件同时使用单击和双击事件

  如果给一个控件同时添加了单击事件和双击事件,那么在触发双击事件前必然会触发单击事件,为了解决这个问题,在网上一顿找,在msdn上找到了微软提供的解决方法:http://msdn.microsoft.com/en-us/library/ms171543(VS.80).aspx。英文好的同学可以不往下看了,:-D。   其主要思想是:单击鼠标时,启动一个Timer,Timer起计时器作用,Time...

Java鼠标事件单击双击

     单击:  双击:   不会出现双击时单击操作和双击操作都运行的情况。...

js区分单击,双击事件

逻辑:第一次单击后,进入计时器方法,指定时间内如果再次单击,则清除上次计时器方法,增加本次计时方法,随后进入双击事件中,再次清除第二次单击的计时器方法,接着执行双击事件中的业务。...

猜你喜欢

js 实现单击、双击事件

js 实现绑定按钮单击、双击事件:  当同时绑定单击和双击事件时,会触发两次单击事件和一次双击事件:  双击时不想触发单击事件代码:  ...

Ext Grid上的单击以及双击事件

进来项目中需要使用双击/单击行记录来获取数据,将实现的方式记录如下:    初始化时添加:以上那个是单独写的添加单击双击事件,主要使用addListener添加'rowclick'和'rowdblclick'代表单击和双击事件。而初始化配置,只要配置Grid里面的listeners就可以了!   恩,我找了一些资料并且自己也实践了一下,的确能用!,大家互相学习吧 资料...

js中鼠标的单击以及双击事件

html中,onclick为单击事件,ondblclick为双击事件 js中定义方法,注意这里用到了定时器来区分单击和双击事件...