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的内容。

posted @ 2020-10-31 20:05  小陈晨  阅读(1660)  评论(0编辑  收藏  举报