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