QTableView禁用单列选择
QTableView disable selection of single column
我在Qt中有一个由MySQL查询生成的QTableView,如下所示:
tableView = new QTableView(this);
tableView->setModel(tableModel);
tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
tableView->resizeColumnsToContents();
其中,tableModel
是QSqlTableModel*
。我发现这里的解决方案是item->setFlags(item->flags() & ~Qt::ItemIsEditable);
,但我不会逐项将数据添加到表中。那么,在这种情况下,解决方案是什么呢?
从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;
}
相关文章:
- 如何使用默认参数等选择模板专业化
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 选择要调用的构造函数
- C++选择排序算法中的逻辑错误
- QTreeView幻灯片多选后无法使用单击选择
- 无法获取菜单选择以运行函数.C++
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 在C++中,如何通过几种类型从元组中选择多个元素
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 对可变参数使用声明.如何选择正确的功能
- 选择选举获胜者的程序
- 如何选择在 csv 文件中输出的位置
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 选择和修改嵌套向量中的条目的最佳实践
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 在运行时选择父类的实现
- 数数并选择 sqlite 中的前三名
- QTableView禁用单列选择