QT Qtableview怎么设置某个单元格不能选择
时间: 2024-03-10 21:43:34 浏览: 202
PyQt5 QTableView设置某一列不可编辑的方法
你可以通过自定义 QStyledItemDelegate 类,并在其 paint 函数中设置该单元格不可选中,从而实现禁止选择某个单元格的功能。具体步骤如下:
1. 创建自定义 QStyledItemDelegate 类,重写其 paint 函数:
```c++
class MyItemDelegate : public QStyledItemDelegate
{
public:
MyItemDelegate(QObject* parent = nullptr)
: QStyledItemDelegate(parent)
{
}
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
// 调用父类 paint 函数绘制单元格
QStyledItemDelegate::paint(painter, option, index);
// 如果是需要禁止选择的单元格,则绘制一个覆盖在上面的半透明矩形
if (index.row() == 1 && index.column() == 1) // 这里以第 2 行第 2 列的单元格为例
{
painter->save();
painter->setOpacity(0.5);
painter->fillRect(option.rect, QColor(255, 255, 255));
painter->restore();
}
}
};
```
2. 在需要使用 QTableView 的地方,创建一个实例化的 MyItemDelegate 对象,并将其设置为 QTableView 的 ItemDelegate:
```c++
// 创建 QTableView 对象
QTableView* tableView = new QTableView(this);
// 创建一个实例化的 MyItemDelegate 对象
MyItemDelegate* itemDelegate = new MyItemDelegate(this);
// 将 MyItemDelegate 对象设置为 QTableView 的 ItemDelegate
tableView->setItemDelegate(itemDelegate);
```
这样,就可以实现禁止选择某个单元格的功能了。在上面的例子中,第 2 行第 2 列的单元格将无法被选择。
阅读全文