2017-09-10 1 views
1

Ich habe den folgenden Code;Kann die Farbe des Artikels in QListView nicht ändern

QStringListModel *model = new QStringListModel(); 
    QStringList list; 
    ui.listViewResults->setEditTriggers(QAbstractItemView::NoEditTriggers); 
    ui.listViewResults->setViewMode(QListView::ListMode); 

    list << "A"; 
    list << "B"; 
    list << "C"; 
    model->setStringList(list); 

    QModelIndex vIndex = model->index(0, 0); 
    QMap<int, QVariant> vMap = model->itemData(vIndex); 
    vMap.insert(Qt::BackgroundRole, QVariant(QBrush(Qt::red))); 
    model->setItemData(vIndex, vMap); 

    ui.listViewResults->setModel(model); 

Noch scheint die Farbe nicht zu ändern, irgendwelche Ideen? Vielen Dank!

+1

A 'QStringListModel' speichert nicht alles andere als Strings. Vielleicht möchtest du ein 'QStandardItemModel'? – peppe

+0

Danke @peppe dies löste das Problem, wenn Sie als Antwort posten möchten. – RanH

Antwort

1

Verwenden Sie QStandartItemModel und QStandartItem, wenn Sie für jedes Element einen anderen Hintergrund benötigen. Oder Sie können sogar Ihr eigenes Modell/Einzelteil machen Subklassen QAbstractItemModel

Beispiel für die Verwendung QStandartItemModel und QStandartItem

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

#include <QStringListModel> 
#include <QStandardItemModel> 
#include <QListView> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QStandardItemModel *model = new QStandardItemModel(); 
    QList<QStandardItem *> list; 
    ui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers); 
    ui->listView->setViewMode(QListView::ListMode); 

    list << new QStandardItem("A"); 
    list << new QStandardItem("B"); 
    list << new QStandardItem("C"); 

    model->appendColumn(list); 

    QModelIndex vIndex = model->index(0, 0); 
    QMap<int, QVariant> vMap = model->itemData(vIndex); 
    vMap.insert(Qt::BackgroundRole, QVariant(QBrush(Qt::red))); 
    model->setItemData(vIndex, vMap); 

    ui->listView->setModel(model); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

enter image description here

Verwandte Themen