Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Май 15, 2015, 15:43



Название: Background for QTableWidget headers
Отправлено: Igors от Май 15, 2015, 15:43
Добрый день

Не нашел такого "шита". Если взять QHeaderView то для него "background-color" меняет только заливку пустой области (где нет названия строки/колонки). Цвет текста - пожалуйста, но не фона

Спасибо

 


Название: Re: Background for QTableWidget headers
Отправлено: sociopath от Май 15, 2015, 16:07
QHeaderView:section {
    background-color: #blabla;
}


Название: Re: Background for QTableWidget headers
Отправлено: Igors от Май 15, 2015, 17:18
QHeaderView:section {
    background-color: #blabla;
}
Нашел эту рекомендацию, но это клинит.
Код
C++ (Qt)
// работает, выбранные ячейки рисуются белым по черному
mTable->setStyleSheep(
"selection-background-color: black;"
"selection-color: white;");
 
// работает, хедеры светло-серые
mTable->setStyleSheep("QHeaderView::section { background-color:lightgrey };");
 
Но вместе не хотят. Т.е. если напишу так
Код
C++ (Qt)
mTable->setStyleSheep(
"selection-background-color: black;"
"selection-color: white;"
"QHeaderView::section { background-color:lightgrey };"
);
 
То не будет цвета хедеров. А если последнюю строку переставить вперед - не будет цвета выбранных ячеек. Это можно проверить прямо в дызайнере

ЧЯДНТ ?


Название: Re: Background for QTableWidget headers
Отправлено: sociopath от Май 15, 2015, 19:11
При вызове функции setStyleSheet виджету устанавливается внутренний QStyleSheetStyle, основанный на стандартном стиле для данной платформы, плюс то, что заложено в qss. При переустановке стиля старый QStyleSheetStyle удаляется и устанавливается новый, т.е. если вызывать setStyleSheet дважды подряд, то возымеет действие только стиль, установленный во втором вызове.
А в вашем случае нужно установить что-то типа:
Код:
mTable->setStyleSheet(
 "QTableView { selection-background-color: black;"
 "selection-color: white; } "
 "QHeaderView::section { background-color:lightgrey; }"
);


Название: Re: Background for QTableWidget headers
Отправлено: Igors от Май 16, 2015, 08:57
Да, так работает, спасибо. Но все-таки не понял в чем была ошибка

Код
C++ (Qt)
mTable->setStyleSheep(
"selection-background-color: black;"
"selection-color: white;"
"QHeaderView::section { background-color:lightgrey };"
);
 
Первые 2 установки меняют для всего виджета, последняя - для section. Почему это не срабатывает?

Спасибо


Название: Re: Background for QTableWidget headers
Отправлено: sociopath от Май 16, 2015, 11:51
Наверняка не знаю, потому что лень разбирать ~2700 строк qssparser.cpp, но:
В доке написано, что вызов
Код:
myPushButton->setStyleSheet("color: blue");
аналогичен вызову:
Код:
myPushButton->setStyleSheet("* { color: blue }");
Возможно, ваш стиль
Код:
selection-background-color: black;
selection-color: white;
QHeaderView::section { background-color:lightgrey };
он преобразует во что-то типа:
Код:
* { selection-background-color: black;
selection-color: white;
QHeaderView::section { background-color:lightgrey }; }
Тогда третья строка, очевидно, содержит ошибку, и парсер ее просто игнорирует.