qtablewidget 文本改变_QT之——QTableWidget拖拽单元格并替换内容(进阶)
时间: 2023-07-30 20:10:24 浏览: 267
您好!关于您的问题,可以通过以下步骤实现:
1.创建一个 QTableWidget,设置行和列的数量。
```cpp
QTableWidget* tableWidget = new QTableWidget(rowCount, columnCount, this);
```
2.在单元格中添加文本。
```cpp
tableWidget->setItem(row, column, new QTableWidgetItem("text"));
```
3.设置 QTableWidget 的拖放模式为 MoveAction,以便可以将单元格拖动到另一个单元格中。
```cpp
tableWidget->setDragDropMode(QAbstractItemView::DragDropMode::MoveAction);
```
4.实现 QTableWidget 的拖动事件,获取拖动单元格的行和列。
```cpp
void MyTableWidget::mousePressEvent(QMouseEvent* event)
{
if (event->button() == Qt::LeftButton)
{
QTableWidgetItem* item = itemAt(event->pos());
if (item != nullptr)
{
m_draggedItem = item;
m_draggedRow = item->row();
m_draggedColumn = item->column();
}
}
}
void MyTableWidget::mouseMoveEvent(QMouseEvent* event)
{
if (event->buttons() & Qt::LeftButton && m_draggedItem != nullptr)
{
QMimeData* mimeData = new QMimeData;
QByteArray itemData;
QDataStream dataStream(&itemData, QIODevice::WriteOnly);
dataStream << m_draggedRow << m_draggedColumn;
mimeData->setData("application/x-qabstractitemmodeldatalist", itemData);
QDrag* drag = new QDrag(this);
drag->setMimeData(mimeData);
drag->exec(Qt::MoveAction);
}
}
void MyTableWidget::dragEnterEvent(QDragEnterEvent* event)
{
event->acceptProposedAction();
}
void MyTableWidget::dragMoveEvent(QDragMoveEvent* event)
{
event->acceptProposedAction();
}
void MyTableWidget::dragLeaveEvent(QDragLeaveEvent* event)
{
event->accept();
}
```
5.实现 QTableWidget 的放置事件,将拖动单元格的文本替换为目标单元格的文本。
```cpp
void MyTableWidget::dropEvent(QDropEvent* event)
{
QPoint dropPoint = event->pos();
int row = rowAt(dropPoint.y());
int column = columnAt(dropPoint.x());
QTableWidgetItem* targetItem = item(row, column);
if (targetItem != nullptr)
{
QByteArray itemData = event->mimeData()->data("application/x-qabstractitemmodeldatalist");
QDataStream dataStream(&itemData, QIODevice::ReadOnly);
int draggedRow, draggedColumn;
dataStream >> draggedRow >> draggedColumn;
QTableWidgetItem* draggedItem = item(draggedRow, draggedColumn);
if (draggedItem != nullptr)
{
QString text = draggedItem->text();
draggedItem->setText(targetItem->text());
targetItem->setText(text);
}
}
event->acceptProposedAction();
}
```
这样,就可以实现 QTableWidget 的拖拽单元格并替换内容了。希望可以帮到您!
阅读全文