QTableWidget实现单元行拖拽

///支持拖拽
this->setDragEnabled(true);
this->setDragDropMode(QAbstractItemView::DragDrop);

protected:
void dropEvent(QDropEvent *event) ;
void mousePressEvent(QMouseEvent *event) ;
private:
int m_selectRow;//鼠标选择拖动的位置
bool m_press;
实现需要的两个函数

void dropEvent(QDropEvent *event)
{
if(this->rowCount() <1)
return;
if(m_press )
itemExchange(m_selectRow,this->rowAt(event->pos().y()));
}
void mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton && !m_press)
{
m_selectRow = this->rowAt(event->y());//通过QtableWidget的row(at)记录按下的位置
m_press = true;
}
QTableWidget::mousePressEvent(event);
}
交换数据函数
void itemExchange(int oldRow, int newRow)
{
if(oldRow == newRow)
return;
int colCount = this->colorCount();
bool oldchecked = this->item(oldRow,0)->checkState();
bool newchecked = this->item(newRow,0)->checkState();
this->item(oldRow,0)->setCheckState(newchecked ? Qt::Checked : Qt::Unchecked);
this->item(newRow,0)->setCheckState(oldchecked ? Qt::Checked : Qt::Unchecked);
for(int i = 1;i<= colCount;i++)
{
if(!this->item(oldRow,i) ||!this->item(newRow,i))
{
continue;
}
QTableWidgetItem* oldItem = takeItem(oldRow,i);
QTableWidgetItem* newItem = takeItem(newRow,i);
setItem(oldRow,i,newItem);
setItem(newRow,i,oldItem);
}
m_press = false;
}

1461

被折叠的 条评论
为什么被折叠?



