Сейчас, как вы можете видеть на рис. 2 ниже, при выборе первой строки для всех цветов текста устанавливается черный вместо сохранения исходного цвета. стиль отображается на рис. 1.
Есть ли способ сохранить исходные цвета при выборе строки (как показано на рис. 3)? Должен ли я продолжать полагаться только на CSS или мне просто создать QAbstractItemDelegate, чтобы решить эту проблему?
Если необходим QAbstractItemDelegate, это быстрее, чем использование CSS, или замедляет работу приложения?

Рис. 1. Как это выглядит без выделения.

Рис. 2. Как это выглядит, когда пользователь выбирает строку 0.

Рис. 3. Сделано в Paint, как бы я хотел, чтобы оно вело себя.
Настройки:
Я использую PySide2: Qt5 на Python 3.10 в Windows 10.
В моем примере я установил несколько свойств в моем QTableWidget перед вставкой в него строк:
self.setEditTriggers(QAbstractItemView.NoEditTriggers) self.setDragDropMode(QAbstractItemView.NoDragDrop) self.setFocusPolicy(Qt.NoFocus) self.setSelectionBehavior(QAbstractItemView.SelectRows) self.setSelectionMode(QAbstractItemView.SingleSelection) self.setAlternatingRowColors(True) self.setShowGrid(False) ТВ = self.verticalHeader() tv.setVisible(False) tv.setSectionsClickable(False) tv.setSectionResizeMode(QHeaderView.Fixed) tv.setDefaultAlignment(Qt.AlignHCenter) th = self.horizontalHeader() th.setHighlightSections(False) th.setStretchLastSection(True) th.setSectionResizeMode(QHeaderView.Interactive) # За исключением столбца 0: ResizeMode — это ResizeToContents Затем я создал функцию, позволяющую легко вставлять в нее элементы. Это большая функция, которая использует несколько методов из QTableWidget и QTableWidgetItem, показанных здесь:
# Вставляем строку в таблицу по указанному индексу self.insertRow(индекс) # Получите QTableWidgetItem из строки r и столбца c и убедитесь, что он существует элемент = self.item(r, c) если (пункт Нет): элемент = QTableWidgetItem() self.setItem(r, c, элемент) # Чтобы изменить цвет текста, используя QColor QTableWidgetItem.setForeground() # Чтобы изменить выравнивание текста, используя Qt Flags QTableWidgetItem.setTextAlignment() # Чтобы установить текст внутри ячейки QTableWidgetItem.setText() Мой CSS, связанный с этими виджетами:
QTableWidget { граница: 1 пиксель, сплошная #ddd; } QTableWidget::item { цвет фона: белый; } QTableWidget::item:альтернативный { цвет фона: #f1f1f1; } /* Я уже пробовал установить «color: inherit», но эффекта нет */ QTableView::item:selected, QTableView::item:alternate:selected { цвет фона: #92b7d1; } QHeaderView::section { цвет фона: светло-серый; } QHeaderView::section:hover { цвет фона: серебро; } Забыл упомянуть после публикации: закругленный цветной квадрат в столбце «Цвет» представляет собой текст в Юникоде из FontAwesomes, который я скачал OTF-файл и добавил в приложение с помощью QFontDatabase из PySide2. В общем вот этот парень.
Мобильная версия