Сегодня короткая статья о том как сделать колонки только для чтения (ReadOnly) в QTableView через модель.
И так определяем клас модели. В класе модели нужно переопределить метод flag:
1: class MyModel : public QSqlTableModel //Model
2: {
3: Q_OBJECT
4: public
5: MyModel(QObject * parent = 0, QSqlDatabase db = QSqlDatabase());
6: Qt::ItemFlags flags(const QModelIndex &index) const; //В этой функции запрещаются колонки на редактирование
7: //...
8: };
Реализовываем виртуальный метод flag:
1: Qt::ItemFlags MyModel::flags(const QModelIndex &index) const
2: {
3: Qt::ItemFlags flags = QSqlQueryModel::(index);
4: if (index.column() == 5 || index.column() == 9 ||
5: index.column() == 10)
6: flags |= Qt::ItemIsEditable;
7: return flags;
8: }
Колонки 5, 9, 10 (нумерация колонок начинается с 0) можно редактировать все остальные поля только ReadOnly.
Теперь подключаем модель:
1: modelMain = new MyModel;
2: modelMain->setTable("TableTemp");
3: //...
4: modelMain->select();
5: modelMain->setEditStrategy(QSqlTableModel::OnFieldChange);
6: m_ui->tableView->setModel(modelMain);
Вот простейшая реализация задачи задания ReadOnly полей. С вопросами прошу в комменты.
bd547e06-3d5d-4a3f-afe7-b50712e780a1|1|5.0