2016-06-14 9 views
0

Ich möchte Hintergrundfarbe für ausgewählte Zeile aus meinem Listview-Modell.Nach Auswahl einer anderen Zeile, die Farbe der vorherigen Zeile machen transparent.Thanks!Qt, QListView Modell

QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override { 
    if (role == Qt::DisplayRole) { 
     qDebug() << "get row:" << index.row(); 
     //auto sp = pets[index.row()].getSpecies(); 
     //return QString::fromStdString(sp); 
     string tara = v[index.row()].getTara(); 
     int pct = v[index.row()].getPct(); 
     QString linie; 
     linie.append(QString::fromStdString(tara)); 
     linie.append(" "); 
     linie.append(QString::number(pct)); 
     return linie; 
    } 
    if (role == Qt::BackgroundColorRole) 
    { 
      QBrush redBackground(Qt::red);//here ,i don't now to put a condition when row is selected 
      return redBackground; 
    } 

    return QVariant{}; 
} 
//here i try to brush the selected row 
QObject::connect(lst->selectionModel(), &QItemSelectionModel::selectionChanged, this, &Console::onSelectionChanged); 
void Console::onSelectionChanged() { 
auto sel = lst->selectionModel()->selectedIndexes(); 
QModelIndex firstSel = sel.at(0); 
Mymodel->setData(firstSel, QBrush(Qt::yellow), Qt::BackgroundColorRole); 
//Console is a class which inherits QWidget,here is a QListView* lst 
+0

Möglich, müssen Sie auf Delegaten schauen: http: //doc.qt.io/qt-5/qitemdelegate.html#paint. Es ist schwer etwas ohne genaue Frage und einige SSCCE/Screenshots zu sagen. –

+0

Ihre endgültige 'data'- und' setData' -Implementierung wird immer noch nicht angezeigt. –

+0

Ich habe keine Implementierung für Daten und setData – paulc

Antwort

0

Sie benötigen eine Auswahl selection model Ihrer Ansicht gedacht zu verfolgen. Wenn die Auswahl geändert wird, können Sie Daten für Ihr Modell festlegen. Zum Beispiel: model->setData(selectedIndex, QBrush(Qt::red), Qt::BackgroundColorRole);

Sie sollten verstehen, dass ein Modell mehreren Ansichten zugewiesen werden kann. Zum tieferen Verständnis empfehle ich Ihnen, über model-view programming in qt zu lesen.

+0

select = lst-> selectionModel() -> selectedIndexes(); QModelIndex firstSel = sel.at (0); Mymodel() -> setData (ersteSel, QBrush (Qt :: gelb), Qt :: BackgroundColorRole); funktioniert nicht – paulc

+0

@paulc was ist dein 'Mymodel()'? Zeigen Sie eine SSCCE oder Ihre 'setData'-Implementierung. Welche Basisklasse für Ihr Modell verwenden Sie? –

+0

@paulc nicht in Kommentaren - http://stackoverflow.com/help/how-to-ask –

Verwandte Themen