По какой-то странной причине не удается переопределить цвет выделенного текста в QListView
. Он работал нормально (цвет выделенного текста автоматически меняется на белый), пока я не определил свой собственный виджет для представления строки.
Теперь я могу изменить цвет фона и некоторые другие визуальные аспекты выбранной строки, но цвет текста всегда остается черным по умолчанию.
Уже перепробовал все что можно с QSS
, QPalette
и data()
/Qt.ForegroundRole
- не помогает никакая хитрость.
Вот упрощенный код, который все еще страдает от проблемы на OS X
. К сожалению, у меня не было возможности протестировать на Windows
или GNU/Linux
.
from PySide.QtCore import *
from PySide.QtGui import *
import sys
view = None
mapp = {}
style = '''
QListView {
show-decoration-selected: 1;
selection-color: white;
selection-background-color: #0068d9;
}
QListView::item:selected:active:hover{
background-color:red; color: white;
}
QListView::item:selected:active:!hover{
background-color: #0068d9; color: white;
}
QListView::item:selected:!active{
background-color:yellow; color: white;
}
QListView::item:!selected:hover{
background-color:green; color: white;
}
'''
class SimpleListModel(QAbstractListModel):
def __init__(self, mlist):
QAbstractListModel.__init__(self)
self._items = mlist
def rowCount(self, parent = QModelIndex()):
return len(self._items)
def index(self, row, column, parent=QModelIndex()):
node = self._items[row]
if not(str(row) in mapp):
index = self.createIndex(row, column)
widget = QLabel(node)
view.setIndexWidget(index, widget)
mapp[str(row)] = index
return index
return mapp[str(row)]
def data(self, index, role = Qt.DisplayRole):
return None
def flags(self, index):
return Qt.ItemIsSelectable | Qt.ItemIsEnabled
class MyMainWindow(QWidget):
def __init__(self):
global view
QWidget.__init__(self, None)
self._model = SimpleListModel(["test", "tes1t", "t3est", "t5est", "t3est"])
vbox = QVBoxLayout()
view = QListView()
view.setModel(self._model)
vbox.addWidget(view)
self.setLayout(vbox)
view.setStyleSheet(style)
first = self._model.index(0, 0)
view.setCurrentIndex(first)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyMainWindow()
w.show()
w.raise_()
app.exec_()
sys.exit()