Название: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: strength2008 от Апрель 27, 2011, 07:47 Всем доброго времени суток.
Возникла следующая проблема. Для своих нужд пришось создать новый класс - наследник от QSqlQueryModel, все делал на основании Qt-шных примеров. Что от нового класса я хотел - 1)Возможность редактирования некотрых полей. 2)Подсветка цветом текста в нужных колонках 3)Отображение пиктограмм в некоторых колонках заместо текста. Первая задача решилась на ура. Вторая и третья не решились никак. Код переопределения QSqlEditableModel::data() в части пиктограммы и подсветки цветом: Код: if (data.isValid() && item.column() == 4 && role == Qt::DisplayRole) Не пашет ни в какую. Отладчиком проверял, картинка грузится, цвет тоже, но не отображается ни то, ни другое. Как это можно исправить? Название: Re: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: alexman от Апрель 27, 2011, 08:17 Про цвет. Попробуй так:
Код: if (item.column() == 2) А для иконки обрабатывай роль Qt::DecorationRole. Название: Re: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: strength2008 от Апрель 27, 2011, 08:32 спасибо за ответ, но не помогло(( Все по-прежнему((
Попробовал так: Код: if (item.column() == 2) С иконкой попробовал переписать так: Код: if (data.isValid() && item.column() == 4 && role == Qt::DecorationRole) Название: Re: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: Troglodit от Апрель 27, 2011, 10:14 а как решилась проблема редактирования полей. имхо -это на порялок сложнее, чем изменение цвета?
Название: Re: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: Troglodit от Апрель 27, 2011, 10:18 возможно вы не верно указали заголовок data() и поэтому вызывается метод родителя.
проверьте хэдэр. Код: QVariant data(const QModelIndex &item, int role) const; Название: Re: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: strength2008 от Апрель 27, 2011, 11:11 Да поля-то нормально редактируются, говорю же,что сделано так же, как в примерах Qt-шных.
Т.е. переопределены функции -члены Код: bool setData(const QModelIndex &item, const QVariant &value, int role = Qt::DisplayRole); В хэдере вроде все нормально: Код: QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const; Название: Re: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: Troglodit от Апрель 27, 2011, 11:17 насчет методов -это понятно, но тогда для изменения одной записи, вызывать кучу обновлений, либо самому реализовывать отложенное обновление как в QSqlTableModel.
По поводу цвета: хедер точно соответствует родительскому методу data()? Вы уверены,что ваш метод вызывается, а не метод родителя? Название: Re: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: strength2008 от Апрель 27, 2011, 11:39 Ну да, уверен, т.к. отладчиком проверял, в новом методе точку останова где цвет ставил.
Название: Re: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: strength2008 от Апрель 27, 2011, 11:51 Ура! Проблема с цветом разрешилась. Причина бага была в следующем:
Функция(переопределенная) начинается с вызова функции класса-родителя Код: QVariant data=QSqlQueryModel::data(item,role); Так вот, в случае, когда вызывается role == Qt::TextColorRole, значение data.isValid == INVALID! Соответственно, переписав конец функции с цветом следующим образом: Код: if (role == Qt::TextColorRole) имеем желамое, т.е. цвет отображается. А вот с картинкой по-прежнему все плохо...(((( Название: Re: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: strength2008 от Апрель 28, 2011, 16:59 Насчет картинки больше никто ничего не может подсказать? :)
Название: Re: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: Troglodit от Апрель 29, 2011, 22:31 А если попробовать возвращать QColor. Если я правильно понял , то должен отбражать просто закрашенный квадрат.
Название: Re: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: Troglodit от Апрель 29, 2011, 22:36 и попробовать
Код: if (item.column() == 4 && role == Qt::DecorationRole) Название: Re: QSqlQueryModel - создание редактируемого класса -наследника Отправлено: strength2008 от Апрель 30, 2011, 07:23 Я так, как в последнем листинге написано, уже пробовал. Собственно, у меня щас там такой код и есть. Но все-по прежнему((
Попробую еще раз документацию перечитать, может там будет что-то подходящее.. Хотя у Макса Шлее в книге пример отображения иконки в табличной модели именно такой, какой в последнем листинге. |