Russian Qt Forum
Ноябрь 25, 2024, 09:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Background for QTableWidget headers  (Прочитано 5255 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Май 15, 2015, 15:43 »

Добрый день

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

Спасибо

 
Записан
sociopath
Гость
« Ответ #1 : Май 15, 2015, 16:07 »

QHeaderView:section {
    background-color: #blabla;
}
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 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 };"
);
 
То не будет цвета хедеров. А если последнюю строку переставить вперед - не будет цвета выбранных ячеек. Это можно проверить прямо в дызайнере

ЧЯДНТ ?
Записан
sociopath
Гость
« Ответ #3 : Май 15, 2015, 19:11 »

При вызове функции setStyleSheet виджету устанавливается внутренний QStyleSheetStyle, основанный на стандартном стиле для данной платформы, плюс то, что заложено в qss. При переустановке стиля старый QStyleSheetStyle удаляется и устанавливается новый, т.е. если вызывать setStyleSheet дважды подряд, то возымеет действие только стиль, установленный во втором вызове.
А в вашем случае нужно установить что-то типа:
Код:
mTable->setStyleSheet(
 "QTableView { selection-background-color: black;"
 "selection-color: white; } "
 "QHeaderView::section { background-color:lightgrey; }"
);
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Май 16, 2015, 08:57 »

Да, так работает, спасибо. Но все-таки не понял в чем была ошибка

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

Спасибо
Записан
sociopath
Гость
« Ответ #5 : Май 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 }; }
Тогда третья строка, очевидно, содержит ошибку, и парсер ее просто игнорирует.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.132 секунд. Запросов: 22.