Таблицы стилей Qt с qtreeview :: item применяются только к дочерним элементам?

Я хочу стилизовать элементы QTreeView, а именно немного увеличить их верхний / нижний отступ. Это мой фрагмент:

QTreeView::item
{
    padding-top:    8px;
    padding-bottom: 8px;
    color: red;
}

К сожалению, этот применяется только к дочерним элементам, т. Е. все элементы верхнего уровня имеют точно такое же заполнение, как и раньше. Я добавил "цвет: красный;" просто в целях тестирования, но красный цвет текста, с другой стороны, применяется ко всем элементам, независимо от того, являются ли они верхним или дочерним.

Есть ли какой-то специальный квалификатор, который мне не хватает? Я пробовал с :active и :has-sibling, но результаты были одинаковыми для каждого случая.

Снимок экрана

Я использую Qt 4.6.3. Я тоже пробовал с 4.8, но результаты такие же.


person Ancurio    schedule 07.12.2012    source источник
comment
Обязательно ли для этого использовать таблицы стилей? Вы можете создать подкласс QAbstractItemDelegate и переопределить sizeHint, чтобы получить то, что вы хотите   -  person Daniel Castro    schedule 07.12.2012
comment
@DanielCastro Это, безусловно, было бы проще, так как у меня есть таблица стилей побольше, содержащая другие определения. Я все же попробую вашу идею!   -  person Ancurio    schedule 12.12.2012


Ответы (2)


Проблема заключалась в подклассе QStyledItemDelegate, который я использовал в представлении. Делегат предназначался только для рисования горизонтальных линий для элементов, и я не повторно реализовал функцию sizehint, но при дальнейшей проверке оказалось, что подкласс возвращал неправильный sizehint.

Поэтому я последовал совету DanielCastro и просто использовал функцию virtual sizehint в подклассе делегата.

person Ancurio    schedule 12.12.2012

Стиль, который вы здесь упомянули, должен работать. Используйте следующий style-sheet и проверьте, дает ли он тот же результат, что и прикрепленный . Используйте Qt Designer для тестирования своего пользовательского интерфейса.

QTreeWidget{outline:0;}

QTreeWidget::item
{
    padding:5px;
    background-color: rgb(235, 235, 235);
    color: #1c1c1c;
    border-right: 10px solid rgb(255, 170, 0);
    font: 400 9.3pt "Segoe UI";
}

QTreeWidget::item:has-children
{
        border-right: 10px solid rgb(255, 0, 255);
}

Вы можете вставить этот код в:

Settings->Preferences->Code->Print/Preview Configuration->Style Sheet

Использование Qt Designer вместо тестирования этого стиля внутри вашего приложения позволит убедиться, что ничто внешнее не влияет на ваш style-sheet. Если это работает должным образом, значит, проблема в другом. Возможно, существует другой стиль, который отменяет желаемый вами стиль.

person warunanc    schedule 07.12.2012