пытаюсь показывать чекбоксы в колонке с bool значениями, для этого использую флаг Qt::CheckStateRole
class myTableModel : public QSqlTableModel {
...
Qt::ItemFlags flags(const QModelIndex& index) const {
Qt::ItemFlags flags = QSqlTableModel::flags(index);
if (record().fieldName(index.column()) == "enabled")
flags = flags | Qt::ItemIsUserCheckable;
return flags;
}
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const {
if (record().fieldName(index.column()) == "enabled" && role == Qt::CheckStateRole) {
return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked;
}
return QSqlTableModel::data(index, role);
}
bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) {
if (role == Qt::CheckStateRole && record().fieldName(index.column()) == "enabled") {
QSqlTableModel::setData(index, (value.toInt() == Qt::Checked) ? 1 : 0);
return true;
}
return QSqlTableModel::setData(index, value, role);
}
};
в результате:
- в колонке показыватся чекбокс и значение поля в виде строки(1 или 0)
- при клике на чекбокс, состояние чекбокса не меняется
как показывать только чекбокс посередине ячейки?
не могу найти причину игнорирования кликов по чекбоксу
любые идеи велкам