QTableView 禁用选择单列
Posted
技术标签:
【中文标题】QTableView 禁用选择单列【英文标题】:QTableView disable selection of single column 【发布时间】:2016-05-01 15:59:50 【问题描述】:我有一个由 Qt 中的 mysql 查询制成的 QTableView,如下所示:
tableView = new QTableView(this);
tableView->setModel(tableModel);
tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
tableView->resizeColumnsToContents();
其中tableModel
是QSqlTableModel*
。我发现解决方案here 是item->setFlags(item->flags() & ~Qt::ItemIsEditable);
,但我没有将数据逐项添加到表中。那么在这种情况下有什么解决方案呢?
【问题讨论】:
遍历项目,不是吗? 那是什么语法? 【参考方案1】:从QSqlTableModel
继承您自己的模型类并重新实现flags()
方法。
可能是这样的:
class CMySqlTableModel : public QSqlTableModel
public:
CMySqlTableModel(QObject* parent)
: QSqlTableModel(parent)
/**
* Enable / disable selection for particular column.
*
*/
void setSelectionEnabledOnColumn(int columnIndex, bool enabled)
if (enabled)
m_columnsNotSelectable.erase(columnIndex);
else
m_columnsNotSelectable.insert(columnIndex);
Qt::ItemFlags flags(const QModelIndex & index) const override
Qt::ItemFlags f = QSqlTableModel::flags(index);
if (m_columnsNotSelectable.find(index.column()) != m_columnsNotSelectable.end())
f &= ~Qt::ItemIsSelectable;
return f;
private:
std::set<int> m_columnsNotSelectable;
【讨论】:
以上是关于QTableView 禁用选择单列的主要内容,如果未能解决你的问题,请参考以下文章
PyQt5 QTableView:如何在保持默认样式/颜色的同时禁用用户交互/选择?
选择单元格时,更改 QTableView 中图标的颜色突出显示