В настоящее время я сталкиваюсь с проблемой таблиц стилей Qt и QTreeView.
Я просто хочу, чтобы текущий элемент, выбранный в дереве, был написан жирным шрифтом.
Я проводил исследования раньше, и решения, представленные на многих форумах:
myView->setStyleSheet("QTreeView::item:selected {font: bold;}");
Но это не работает для меня. Я старался QTreeView {font: bold;}
который работает (для каждого элемента) и QTreeView::item:selected {background-color:red;}
тоже работает Почему шрифт не работает для выбранного элемента?
Спасибо !
Довольно старый вопрос, но, возможно, кто-то найдет его полезным.
У меня такие же проблемы с использованием Qt 5.3.
Я нашел некоторую информацию о кварты-центр что это не может быть сделано таблицей стилей.
Есть ли способ изменить вес шрифта (или минимальный размер шрифта)
выбранный элемент в QListWidget? Нет, так как применяется такая опция стиля шрифта
для QWidgets, чтобы вы могли применить шрифт (или другой, например, размер шрифта)
опция стиля для всего QWidget (в данном случае QListWidget), а не
к особому поведению производного QWidget, то есть выбора QListWidget
вещь.
Я думаю, что это относится и к QTreeView, потому что я не смог изменить его стиль.
Я могу изменить границу, цвет, цвет фона, но ничего не касается шрифта.
Сначала я подумал, что мне нужно переопределить функцию paintEvent, потому что я переопределяю QTreeView. Это не сработало.
Обходное решение:
Но я нашел обходной путь, используя QStyledItemDelegate.
В основном вы должны создать подкласс QTreeView, а затем создать подкласс QStyledItemDelegate.
Может быть, это будет работать без создания подкласса QTreeView, но вы должны каким-то образом поймать некоторый сигнал с выбранными и невыбранными элементами и вызвать setItemDelegateForRow и setItemDelegateForColumn (это должно изменить только пересекающуюся ячейку)
Переопределите QStyledItemDelegate :: paint таким образом:
QStyledItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItemV4 editedOpt = option;
editedOpt.font = QFont("Arial", 23, 500);
initStyleOption( &editedOpt, index );
QStyledItemDelegate::paint(painter, editedOpt, index);
}
Переопределить QTreeView :: selectionChanged (или просто QTreeView и поймать QItemSelectionModel :: selectionChanged):
void CustomTreeView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
foreach(const QModelIndex &index, selected.indexes()) {
setItemDelegateForRow(index.row(), new CustomDelegate(this));
setItemDelegateForColumn(index.column(), new CustomDelegate(this));
}
foreach(const QModelIndex &index, deselected.indexes()) {
setItemDelegateForRow(index.row(), new QStyledItemDelegate(this));
setItemDelegateForColumn(index.column(), new QStyledItemDelegate(this));
}
}
Других решений пока нет …