Zmiana koloru wiersza w QTableView

0

Mam sobie bazę, której rekordy mogę obserwować dzięki QTableView. Chciałbym, aby niektóre z moich wierszy (dokładnie te, z dzisiejszą datą - z tym sobie poradzę) były pomalowane jakimś kolorem, a pozostałe nie.

Moje pytanie: jak pokolorować tylko wybrane wiersze QTableView? Zaznaczam, że nie chcę i nie mogę implementować własnego ItemDelegate. Szukam innego rozwiązania ;)

0

dowolną komórkę możesz pokolorować dobierając się do modelu:

model->setData(model->index(1, 1), QColor(Qt::green), Qt::BackgroundColorRole);

więc perfidnie możesz wypełnić tak cały wiersz dowolnymi kolorami.

albo już podczas samego wypełniania modelu.

0

Hm, nie działa. :( Tzn. Kompiluje się, ok, ale nie maluje :( Kawałek kodu wstawiłem w miejscu, gdzie powinny mi się podświetlić odpowiednie daty - niestety, nie są one zamalowane. Może coś nie tak jest z tymi indexami? Tzn. model->index(4,4) - może jakieś inne numery? :( Nic mi nie przychodzi do głowy, czemu to nie działa. Ma ktoś pomysł?

0
#include <QtGui/QApplication>
#include <QTableView>
#include <QStandardItemModel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QStandardItemModel model(5, 3);
    model.setData(model.index(2, 0), QColor(Qt::darkBlue), Qt::BackgroundColorRole);
    model.setData(model.index(2, 1), QColor(Qt::darkGreen), Qt::BackgroundColorRole);
    model.setData(model.index(2, 2), QColor(Qt::darkRed), Qt::BackgroundColorRole);

    QTableView tableView;
    tableView.setModel(&model);
    tableView.show();

    return a.exec();
}

to też ci nie działa?

0

No to mi pięknie działa! Tylko, ze ja u siebie mam zamiast QStandardItemModel QSqlTableModel - może to jest przyczyna?

0

U mnie też zadziałało,tyle że mam przeimplementowany QSqlTableModel.Dodałem zatam do data() linijkę (przy czym dokumentacja mówi,że BackgroundColorRole jest przestarzałe i należy używać tego co ja mam):

if(role==Qt::BackgroundRole && index.isValid()) return Qt::yellow;
0
MasterBLB napisał(a)

U mnie też zadziałało,tyle że mam przeimplementowany QSqlTableModel.Dodałem zatam do data() linijkę (przy czym dokumentacja mówi,że BackgroundColorRole jest przestarzałe i należy używać tego co ja mam):

if(role==Qt::BackgroundRole && index.isValid()) return Qt::yellow;

Ok, tylko nie bardzo wiem, gdzie to dodałeś? bo nie wiem jak to teraz posklejać z moim kodem

0

obczaj sobie w Assistancie co robi QAbstractItemModel::data( const QModelIndex & index, int role = Qt::DisplayRole ) const.Jak nie zczaisz,to wczytaj się w model/view programming.
To w tej właśnie funkcji dopisałem tą linijkę co widzisz,a prócz niej potrzeba będzie wywołać wersję data z klasy rodzicielskiej dla else.

0

Kurcze, nic mi się nie udało :( Może jeszcze jakieś podpowiedzi? :(

0

Oto działający u mnie kod:

class MyModel : public QSqlTableModel
{
public:
   QVariant data(const QModelIndex & index, int role = Qt::DisplayRole ) const
   {
         if(role==Qt::BackgroundRole && index.isValid()) return Qt::yellow;//jakby co,to upewnij się w opisie klasy QVariant,że QColora da się na to przekonwertować
         else return QSqlTableModel::data(index,role);
   };
};
0

Czyli mam napisać sobie to co mi podałeś, i zamiast tworzyć QsqlTableModel po prostu stworzyć obiekt mojej klasy? I nic więcej?

0

Zaraz będę próbował! :)

0

No niezupełnie tak nic-w końcu MyModel jest odmianą QSqlTableModelu,więc wszelakie setTabley,selecty,jak i nastawienie w widoku przez setModel są wymagane

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