Zmiana koloru tekstu w modelach opertych o QAbstractItemModel

0

Witam,
jakie są sposoby na zmianę koloru tekstu pozycji w modelach dziedziczonych z QAbstractItemModel?
Obecnie stosuję takie podejście, że ponownie implementuję funkcję:

QVariant QAbstractItemModel::data ( const QModelIndex & index, int role = Qt::DisplayRole )

i w niej umieszczam przykładowo kod:

// ...
switch(role)
{
  case Qt::ForegroundRole:
  {
    return QBrush(Qt::red);
  }
}
// ...

Jednak powyższy sposób powoduje to iż nie można tego kolor zmienić w stylach ustawianych przez "QWidget::setStyleSheet ( const QString & styleSheet )". Zawsze jest kolor czerwony.

Czy jest sposób na to, aby style CSS miały "wyższy priorytet" niż ustawienia wyglądu poczynione w QAbstractItemModel::data()?

Zastanawiam się też czy jest to zgodne z wzorcem MVC (a właściwie dla Qt Widok-Model Delegat).
Czy są może inne lepsze sposoby na ustawianie koloru tekstów pozycji opartych o model QAbstractItemModel? Jeśli tak to jakie?

0

Za bardzo kombinujesz. Jeśli chcesz ignorować dane z modelu (w zasadzie do tego dążysz), to po prostu dla zadanego widoku zastosuj nowego delegata, który będzie element rysował inaczej niż domyślnie.
QAbstractItemView::setItemDelegate
Przykładowo rozszerz klasęQStyledItemDelegate i zmodyfikuj QStyledItemDelegate::paint

Edit: W sumie to nie rozumie co ty kombinujesz? Ustawiasz w modelu jakiś kolor, ale równocześnie go chcesz ignorować! Najwyraźniej sam nie wiesz co chcesz zrobić.
Nie pytaj nas jak naprawić twoje dziwne rozwiązanie jakiegoś problemu, ale opisz: jaki jest twój pierwotny problem, co chcesz osiągnąć?

0
MarekR22 napisał(a)

Edit: W sumie to nie rozumie co ty kombinujesz? Ustawiasz w modelu jakiś kolor, ale równocześnie go chcesz ignorować! Najwyraźniej sam nie wiesz co chcesz zrobić.
Nie pytaj nas jak naprawić twoje dziwne rozwiązanie jakiegoś problemu, ale opisz: jaki jest twój pierwotny problem, co chcesz osiągnąć?

To nie jest "jakiś kolor" tylko Qt::ForegroundRole, o czym pisałem. Gdy ustawiam kolor dla Qt::ForegroundRole to chce go ignorować tylko wtedy gdy zdefiniowany jest arkusz stylów przy pomocy QWidget::setStyleSheet().
Generalnie chodzi o to, że chcę ustawić pewien kolor domyślny tekstu w kodzie aplikacji (bez wykorzystywania CSS) dla powiedzmy całej tabeli opartej o QTableView. Jednakże chcę mieć także możliwość aby w arkuszu stylu CSS można było ten kolor zmienić. Obecnie jeśli ustawię kolor w kodzie programu w modelu poprzez Qt::ForegroundRole to wykorzystując arkusz stylu CSS nie mogę zmienić domyślnego koloru.

1 użytkowników online, w tym zalogowanych: 0, gości: 1