QTableView меняет цвет строки на основе значения - PullRequest
3 голосов
/ 19 января 2012

У меня есть QTableView, который я реализовал с моей собственной моделью, подклассом из QAbstractTableModel.Я хочу иметь возможность изменить цвет строки на красный, когда одно из полей в строке имеет определенное значение.Я видел много примеров, когда ответом было бы назвать модели setData и использовать Qt::BackgroundRole для изменения цвета фона.Поскольку я вложил в подкласс AbstractTableModel, я переопределил setData и data, поэтому вызов моделей setData ничего не делает с ролью цвета фона, поскольку я работаю только с данными, роль которых Qt::DisplayRole.

Наверное, мой первый вопрос: есть ли более простой способ изменить цвет всей роли?Если нет, я предполагаю, что мне нужно реализовать эту часть в setData и data, чтобы обработать BackgroundRole, который я понятия не имею, как это сделать, если у кого-то есть примеры того, как это сделать, это действительно поможетмного ...

Ответы [ 2 ]

4 голосов
/ 06 февраля 2014

Лучшим ответом является использование delegate, предоставленного view для этой задачи, и не касаться model вообще Почему модель должна знать что-либо о цвете, который вы хотите видеть? Что произойдет, если вы хотите, чтобы несколько представлений вели себя по-разному? Т.Д.

Вы можете использовать setColumnDelegate, или setRowDelegate, или ряд других механизмов. Посмотрите на эти функции для полного ответа.

4 голосов
/ 19 января 2012

Это было проще, чем я думал ... В моем методе данных я добавил проверку для

if (role == Qt::BackgroundColorRole) 

В этом блоке if. Я проверяю, выполняется ли сравнение значений, чтобы увидеть, если это строка, для которой мне нужно изменить цвет, и если это так, я возвращаю:

return QVariant(QColor(Qt::red));
...