QTableWidget 设置仅有一行被选中
时间: 2024-12-12 15:18:45 浏览: 15
要在Qt的`QTableWidget`中设置每次只有一个单元格被选中,你需要确保在用户点击其他单元格时取消前一个单元格的选择。这通常可以通过重写`QAbstractItemView`的`currentChanged`信号处理函数来实现。以下是一个简单的例子:
首先,创建一个自定义的`QTableView`派生类:
```cpp
class SingleRowSelectionTable : public QTableView
{
public:
explicit SingleRowSelectionTable(QWidget *parent = nullptr)
: QTableView(parent)
{
setSelectionMode(QAbstractItemView::SingleSelection);
connect(this, &SingleRowSelectionTable::currentItemChanged, this, &SingleRowSelectionTable::clearPreviousSelection);
}
private slots:
void clearPreviousSelection()
{
// 获取当前选中的项
QTableWidgetItem *currentItem = currentItem();
// 如果有之前选中的项,取消其选中状态
if (previousSelectedItem)
previousSelectedItem->setSelected(false);
previousSelectedItem = currentItem;
}
private:
QTableWidgetItem *previousSelectedItem = nullptr;
};
```
然后,在你的`QTableWidget`实例中替换为`SingleRowSelectionTable`:
```cpp
SingleRowSelectionTable *table = new SingleRowSelectionTable(parent);
table->setModel(model); // 设置模型数据
```
这样,当你在表格中切换选择时,旧的选中项会被自动取消选中,始终保持一个单元格处于选中状态。
阅读全文