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);
}
}