Как установить таблицу стилей для одного элемента в Qlistview?

У меня есть QListView, содержащий QStandardItems . Как установить таблицу стилей для одного элемента в Qlistview на основе полученного QModelIndex?

2 ответа

Если вы используете QListWidget вместо QListView, вы можете вызвать QListWidget::setItemWidget() и настроить внешний вид отдельных элементов, применяя таблицу стилей к добавляемым элементам. Вам нужно убедиться, что ваш класс виджетов элементов наследуется от QWidget, и вы можете применять стили к виджету, используя QSS, как в конструкторе:

setStyleSheet("WidgetItem:pressed { background-color: #444444; }");

Вот ссылка на QSS: http://qt-project.org/doc/qt-4.8/stylesheet-examples.html

Я все еще вижу классы виджетов, документированные в Qt Documentation for Qt 5.7 - Классы виджетов Qt Widgets. Ссылка: http://doc.qt.io/qt-5/widget-classes.html

Кажется, нет способа установить таблицу стилей в конекпте Model-View. Но то, что существует, - это FontRole. Если вы хотите выделить запись жирным шрифтом или курсивом или изменить размер, FontRole может это сделать. Если вы хотите изменить цвет, вам нужно найти другое решение.

Вот пример выделения жирным шрифтом некоторых записей в python:

def data(self, index, role=QtCore.Qt.DisplayRole):
    # use parent class to get unaltered result
    res = super().data(index, role=role)
    if role == QtCore.Qt.FontRole:
        # modify FontRole
        if index.row() = 3:
            # row number 3 should be bold
            if res is None:
                # parent class didn't return a QFont so make one
                res = QtGui.QFont()
            # set bold attribute in font
            res.setBold(True)
    return res

Выше data()метод выделяет 4-ю строку жирным шрифтом (строки отсчитываются от 0). Я оставляю перевод на C++ читателю.

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