LINUX.ORG.RU

Изменение цвета ячейки в QTableView когда меняется значение QCheckBox

 ,


0

1

Доброго времени суток. Имеется QTableView с моделью QStandardItemModel. Задача такая, на некоторых ячейках я разрешил Checkable, мне нужно чтобы когда галочка ставилась на ячейку то она перекрашивалась в красный цвет, а если убрали галочку то ставился стандартный цвет.

Как такое реализовать? Если можно то дайте пожалуйста примеры.

Подскажите новичку.


Не знаю насчёт StandardModel, но в AbstractModel это делается добавлением одного if'а в метод data()

UVV ★★★★★
()

Создайте класс-наследник от QStandartItemModel и переопределите data(). Всё просто.

Помню, тоже надо было менять цвет в QSqlTableModel. Промучался, пока не узнал, что через data это делается легко)

Release
()

Если не ошибаюсь, тебе в момент клика нужно сделать setData(<QBrush, в которой хранится нужный тебе цвет>, Qt::BackgroundRole) для ячейки с изменившимися данными

XMs ★★★★★
()
Ответ на: комментарий от Silerus

Получается бесконечный цикл, так как, сигнал itemChanged улавливает изменения в item'е, когда я подсоединяю слот в котором я меняю параметры(в данном случае параметры цвета) item'а то вызывается опять сигнал itemChanged, так как произошло изменение в item'е и так по кругу.

Если что то не так понял то поправьте меня пожалуйста.

Egor12
() автор топика
Ответ на: комментарий от XMs

Не много не так. На ячейке(QStandardItem) я разрешил Checkable, то есть на нем есть QCheckBox, когда меняется галочка мне нужно менять цвет ячейки.

Egor12
() автор топика
Ответ на: комментарий от Egor12

Порылся в своём говнокоде и нашел. Думаю, пойдет

QVariant MTableModel::data(const QModelIndex &idx, int role) const
{
    if (role == Qt::BackgroundRole)
    {
        if (!QSqlTableModel::data(this->index(idx.row(), 1)).toString().isEmpty())
        {
            QVariant v = QColor(200, 200, 200, 200);
            return v;
        }
    }
    if (role == Qt::DisplayRole)
    {
        return QSqlTableModel::data(idx);
    }

    return QVariant();
}
Release
()
Ответ на: комментарий от Egor12

тогда меняйте стандарт на абстракт модель и описываете свою модель, как описано в книге профессиональное программирование qt

Silerus ★★★★
()
Ответ на: комментарий от Silerus

Ребят, всем спасибо за ответы, буду ща разбираться.

Egor12
() автор топика

Ещё можно решить через кастомный делегат, может быть более идеоматично в зависимости от задачи.

unC0Rr ★★★★★
()

Посмотрел щас на свой 100500 летний исходник на qt4.6 и я там юзал

QTableWidgetItem.setBackgroundColor()

jo_b1ack ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.