У меня на форме лежит QTableView который использует свою собственную модель QAbstractModel. Одну колонку можно редактировать. Проблема в том, что иногда после добавления строк в таблицу я пытаюсь редактировать ячейку таблицы появляется как и положено Edit но ничего в нем не печатается, как будто он не активен. Причем в это время абсолютно все ячейки этой колонки редактировать нельзя - пробую другие такой же эффект. Помогает только если переключиться в другое окно или открыть другое окно в программе и заново даблкликнуть по ячейке. Что это может быть?
Воспроизводится это не всегда, а както выборочно и только после добавления строки.
На всякий вот код из модели (может комуто будет интересно):
C++ (Qt)
QVariant TxOrderModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole) {
return m_TableData.getCellValue(index.row(), index.column());
}
if (role == Qt::EditRole) {
return m_TableData.getCellValue(index.row(), index.column());
}
if (role == Qt::BackgroundColorRole) {
return TxOrder::getStatusColor(m_TableData.getCellValue(index.row(), QString("order_status")).toInt());
}
return QVariant();
}
Qt::ItemFlags TxOrderModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags flags = QAbstractTableModel::flags(index);
QString columnName = m_TableData.getColumnName(index.column());
if (columnName == "driver_callsign") {
flags |= Qt::ItemIsEditable;
}
return flags;
}
bool TxOrderModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (role == Qt::EditRole) {
QString columnName = m_TableData.getColumnName(index.column());
if (columnName == "driver_callsign") {
QString primaryKey = m_TableData.getRowFieldValue(index.row(), m_TableData.getKeyField());
QString callsign = value.toString();
if (!callsign.isEmpty()) {
m_Order.setDriverToOrderByCallsign(primaryKey, callsign);
}
}
}
return true;
}
m_Order.setDriverToOrderByCallsign отправляет HTTP запрос поэтому тут ничего не подгужается. Когда данные приходят выполняется merge.