Qt, модель QListView

Я хочу установить цвет фона для выбранной строки в моей модели списка. После выбора другой строки цвет предыдущей строки становится прозрачным. Спасибо!

    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

1 ответ

Вы должны отслеживать выбор мышления, модель выбора вашего взгляда. Когда выбор изменяется, вы можете установить данные для вашей модели. Например: model->setData( selectedIndex, QBrush(Qt::red), Qt::BackgroundColorRole );

Вы должны понимать, что одна модель может быть назначена нескольким представлениям. Для глубокого понимания я предлагаю вам прочитать о программировании вида модели в qt.

Другие вопросы по тегам