QTableWidget實現滑鼠拖動互換位置
阿新 • • 發佈:2020-10-31
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);
}
}