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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM