找回密码
 立即注册
收起左侧

QTreeView鼠标左键单击和双击的问题

2
回复
3574
查看
[复制链接]
累计签到:793 天
连续签到:5 天
来源: 2017-10-31 20:01:32 显示全部楼层 |阅读模式
10Qter豆
现在的需求是单击和双击分别触发不同的功能,我现在连接是|QTreeView的单击和双击信号,
双击时会收到单个信号,分别是 单击 双击 单击,这个该如何解决

回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2018-7-10 16:16:38 显示全部楼层
继承QTreeview,重写以下几个方法:
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:eftButton )          //是否左键按下
    {
        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
            //你的处理...
        }
    }
}

其他的双击、右击类似
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2018-7-10 16:17:14 显示全部楼层

RE: QTreeView鼠标左键单击和双击的问题

继承QTreeview,重写以下几个方法:
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:eftButton )          //是否左键按下
    {
        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
            //你的处理...
        }
    }
}

其他的双击、右击类似
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册