1. 程式人生 > 實用技巧 >QTableWidget實現滑鼠拖動互換位置

QTableWidget實現滑鼠拖動互換位置

QTable實現滑鼠拖動互換位置

1、QTableWidget要實現兩個用滑鼠拖動互換位置的功能,可以從重寫:

void wheelEvent(QWheelEvent *event);

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

具體方法如下

定義一個要用到的變數

intm_selectRow;//滑鼠選擇拖動的位置
intm_hover;//滑鼠拖動釋放的位置
boolm_press;//判斷滑鼠是否按下
boolm_draging;//判斷是滑鼠是否釋放

重寫滑鼠的事件

mousePressEvent(QMouseEvent *event)事件

voidmousePressEvent(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)事件

voidmouseReleaseEvent(QMouseEvent*event)
{
if
(m_draging)//如果滑鼠左鍵被釋放
{
m_press=false;//按下標誌置fasle,形成互斥
m_hover=this->rowAt(event->y());//記錄釋放時,滑鼠的位置
}
//QTableWidget::mouseReleaseEvent(event);//增加這一行滑鼠每次刪除釋放都會自動增加一行item
}

對兩個位置的item進行內容的互換。

voiditemSelectionChanged()
{
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的內容。