Qtablewidget禁止拖动单元格
时间: 2023-11-28 07:03:37 浏览: 318
要禁止QTableWidget中的单元格拖动,可以使用setEditTriggers方法并将其设置为NoEditTriggers。这将禁用所有编辑触发器,包括拖动单元格。示例代码如下:
```
self.QTableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
```
相关问题
QTableWidget单元格禁止拖动
要禁止 QTableWidget 单元格的拖动,你可以设置单元格的 item 为不可编辑,并将单元格的拖动属性设置为禁止。
下面是一个示例,展示了如何禁止 QTableWidget 单元格的拖动:
```cpp
// 创建一个 QTableWidget 对象
QTableWidget *tableWidget = new QTableWidget(this);
// 禁止单元格编辑
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
// 禁止单元格拖动
tableWidget->setDragDropOverwriteMode(false);
tableWidget->setDragEnabled(false);
tableWidget->setDropIndicatorShown(false);
```
在上述示例中,我们创建了一个 QTableWidget 对象,并通过 setEditTriggers() 方法将单元格的编辑触发器设置为 NoEditTriggers,这样单元格就无法编辑了。
此外,我们通过 setDragDropOverwriteMode()、setDragEnabled() 和 setDropIndicatorShown() 方法来禁止单元格的拖动。这些方法将拖放模式设置为禁止,并隐藏了拖放指示器。
通过以上设置,QTableWidget 的单元格将无法被拖动。
希望以上信息能够对你有所帮助!如果有任何进一步的问题,请随时提问。
qtablewidget 文本改变_QT之——QTableWidget拖拽单元格并替换内容(进阶)
您好!关于您的问题,可以通过以下步骤实现:
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 的拖拽单元格并替换内容了。希望可以帮到您!
阅读全文
相关推荐















