zoukankan      html  css  js  c++  java
  • QTableWidget实现鼠标拖动互换位置

    QTable实现鼠标拖动互换位置

    1、QTableWidget要实现两个用鼠标拖动互换位置的功能,可以从重写:

    void wheelEvent(QWheelEvent *event);
    

    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);

    具体方法如下

    定义一个要用到的变量

        int             m_selectRow;//鼠标选择拖动的位置
        int             m_hover;//鼠标拖动释放的位置
        bool            m_press;//判断鼠标是否按下
        bool            m_draging;//判断是鼠标是否释放

    重写鼠标的事件

    mousePressEvent(QMouseEvent *event)事件

    void mousePressEvent(QMouseEvent *event)
    {
        if(event->button() == Qt::LeftButton)
        {
            m_press = true;//鼠标按下的标志
            m_draging = false;//鼠标左键释放的标志
            m_selectRow = this->rowAt(event->y());//通过QtableWidget的row(at)记录按下的位置
        }
        QTableWidget::mousePressEvent(event);
    }

    mousereleaseEvent(QMouseEvent *event)事件

    void mouseReleaseEvent(QMouseEvent *event)
    {
          if(m_draging)//如果鼠标左键被释放
          {
              m_press = false;//按下标志置fasle,形成互斥
              m_hover = this->rowAt(event->y());//记录释放时,鼠标的位置
          }
    //   QTableWidget::mouseReleaseEvent(event);//增加这一行鼠标每次删除释放都会自动增加一行item
    }

    对两个位置的item进行内容的互换。

    void itemSelectionChanged()
    {
      if(m_selectRow != m_hover)//判断两个位置是否相等
      {
          QTableWidgetItem *olditem =takeItem(m_selectRow,0);//获取两个item的内容
          QTableWidgetItem *currentItem=takeItem(m_hover,0);
          setItem(m_selectRow,0,currentItem);//交换两个位置的内容
          setItem(m_hover,0,olditem);
      }
    }

    总的来说就是要获取两个要交换的位置,然后通过takeItem()函数获取QTabeWidgetItem,最后setItem函数重置两个item的内容。

  • 相关阅读:
    编译资源收集
    volatile和synchronized到底啥区别?多图文讲解告诉你
    沙雕与大婶 | Mock掉你的外部依赖吧
    全网最详细的一篇Flutter 尺寸限制类容器总结
    一篇带你看懂Flutter叠加组件Stack
    【MySQL】:事务四大特性与隔离级别
    Dubbo 入门-细说分布式与集群
    Java 线程基础知识
    SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」
    搭建博客、自己的小窝?快来看看这些开源静态网站生成器
  • 原文地址:https://www.cnblogs.com/wickhamchen/p/13907338.html
Copyright © 2011-2022 走看看