Qt

Изменить цвет фона и текста ячейки или строки QTableView

Для решения поставленной задачи отнаследуемся от класса QIdentityProxyModel:

[pastacode lang=»cpp» manual=»%23include%20%3CQDialog%3E%0A%23include%20%3CQSqlQueryModel%3E%0A%23include%20%3CQIdentityProxyModel%3E%0A%0Aclass%20ColorCell%20%3A%20public%20QIdentityProxyModel%0A%7B%0Apublic%3A%0A%20%20%20%20ColorCell()%20%7B%7D%0Aprotected%3A%0A%20%20%20%20virtual%20QVariant%20data(const%20QModelIndex%20%26index%2C%20int%20role)%20const%3B%0A%7D%3B%0A%0A%0Aclass%20myClass%3A%20public%20QDialog%20%7B%0A….%0Aprivate%20slots%3A%0A%09void%20updateModel()%3B%0Aprivate%3A%0A%09QSqlQueryModel%20*model%3B%0A%09ColorCell%20*colorCellModel%3B%0A%7D» message=»» highlight=»» provider=»manual»/]

Переопределим функцию data:

[pastacode lang=»cpp» manual=»QVariant%20ColorCell%3A%3Adata(const%20QModelIndex%20%26index%2C%20int%20role)%20const%0A%7B%0A%20%20%20%20%2F%2F%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%86%D0%B2%D0%B5%D1%82%D0%B0%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0%20%D0%BD%D0%B0%20%D0%BA%D1%80%D0%B0%D1%81%D0%BD%D1%8B%D0%B9%20%D0%B2%200-%D0%BE%D0%B9%20%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B5%0A%09if%20(role%20%3D%3D%20Qt%3A%3AForegroundRole)%20%7B%0A%20%20%20%20%20%20%20%20if%20(index.column()%20%3D%3D%200)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20QBrush(Qt%3A%3Ared)%3B%0A%20%20%20%20%7D%0A%09%2F%2F%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%86%D0%B2%D0%B5%D1%82%D0%B0%20%D1%84%D0%BE%D0%BD%D0%B0%20%D0%B2%D1%81%D0%B5%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%20%D0%BF%D0%BE%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8E%20%D0%B2%20%D1%8F%D1%87%D0%B5%D0%B9%D0%BA%D0%B5%204-%D0%BE%D0%B9%20%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B8%0A%09if%20(role%20%3D%3D%20Qt%3A%3ABackgroundRole)%20%7B%0A%20%20%20%20%20%20%20%20if(!index.model()-%3Edata(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20index.model()-%3Eindex(index.row()%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Qt%3A%3ADisplayRole).toBool())%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20QBrush(Qt%3A%3Agreen)%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20QBrush(Qt%3A%3Ablue)%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20QIdentityProxyModel%3A%3Adata(index%2C%20role)%3B%0A%7D» message=»» highlight=»» provider=»manual»/]

Теперь определим для нашей прокси-модели ее модель-источник:

[pastacode lang=»cpp» manual=»myClass%3A%3AmyClass(QWidget%20*parent)%20%3A%0A%20%20%20%20QDialog(parent)%2C%0A%20%20%20%20ui(new%20Ui%3A%3ABuffer)%0A%7B%0A%09ui-%3EsetupUi(this)%3B%0A%20%20%20%20colorCellModel%20%3D%20nullptr%3B%0A%09model%20%3D%20nullptr%3B%0A%09updateModel()%3B%0A%7D%0A%0Avoid%20myClass%3A%3AupdateModel()%20%7B%0A%09if%20(!model)%20%7B%0A%09%09model%20%3D%20new%20QSqlQueryModel%3B%0A%20%20%20%20%09colorCellModel%20%3D%20new%20ColorCell%3B%0A%20%20%20%20%09ui-%3EtableView-%3EsetModel(colorCellModel)%3B%0A%09%7D%0A%09model-%3EsetQuery(%3Cquery%20text%3E)%3B%0A%09colorCellModel-%3EsetSourceModel(model)%3B%0A%7D» message=»Установка модели в качестве sourceModel для обработки прокси-моделью» highlight=»» provider=»manual»/]

Теперь таблица будет раскрашена в соответствии с заданными условиями.