我在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);
,但我不是逐项将数据添加到表中。那么这种情况下的解决方案是什么?
答案 0 :(得分: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;
}