[Решено] Qt: QSqlTableModel заменить текст на цвет в столбце (Например, в БД "true" отобразить зелёным в QTableView)

Модератор: Модераторы разделов

Ответить
FlySnake
Сообщения: 992
ОС: openSUSE
Контактная информация:

[Решено] Qt: QSqlTableModel заменить текст на цвет в столбце

Сообщение FlySnake »

Всем привет!
Есть БД sqlite, которая пишется некой программой. Эту БД читает приложение на Qt и отображает в QTableView. Один из столбцов таблицы содержит текст, который нужно превратить в цвет фона ячейки. Т.е. текст "true" в таблице отобразить монотонно зелёным фоном ячейки в QTableView, соответсвенно "false" - красным. Достаточно 2-х цветов, но может в будущем может что-то ещё добавиться.
Подскажите как это можно сделать?

зы. Желательно без написания собственной модели :)
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [Решено] Qt: QSqlTableModel заменить текст на цвет в столбце

Сообщение NickLion »

Смотрите в сторону setItemDelegateForColumn.
Спасибо сказали:
FlySnake
Сообщения: 992
ОС: openSUSE
Контактная информация:

Re: [Решено] Qt: QSqlTableModel заменить текст на цвет в столбце

Сообщение FlySnake »

Осилил :( Уже не первый раз с этими моделями и делегейтами не могу справиться.

Делаю так:

Код: Выделить всё

class ColorDelegate : public QItemDelegate
{
    Q_OBJECT
public:
    explicit ColorDelegate(QObject *parent = 0);

    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;

signals:

public slots:

};

В конструкторе класса окна с таблицей:

Код: Выделить всё

ColorDelegate *delegate = new ColorDelegate(this);
    ui->tableView->setItemDelegateForColumn(1, delegate);


Но ни createEditor() ни одна другая перегруженная в ColorDelegate функция не вызывается (вставлены затычки qDebug)

Примеры взяты тут http://www.qtcentre.org/threads/23000-dele...-QSqlTableModel и тут http://www.youtube.com/watch?v=EJf-vZ6FQfc...ture=plpp_video

Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [Решено] Qt: QSqlTableModel заменить текст на цвет в столбце

Сообщение NickLion »

createEditor() должна вызываться при двойном клике. Для фона нужно paint(). В общем приложил примерчик.
qtv_qid.tar.xz
(2.21 КБ) 51 скачивание
Спасибо сказали:
Ответить