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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Проблемы с QTableView::resizeColumnsToContents при использовании прокси  (Прочитано 1939 раз)
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 861


Мы должны приносить пользу людям.


Просмотр профиля
« : Май 29, 2023, 10:48 »

Коллеги, обнаружились проблемы с использованием subj при переключении от исходной модели к QSortFilterProxyModel: ширина колонок в табличном вьюшнике устанавливается некорректно (шире, чем должно быть). Это происходит в Win 10, Qt 5.13.0. В linux не проверял, но догадываюсь, что там-то будет все хорошо))

Причина обнаружилась в стиле с цветом фона заголовков, который я устанавливаю для таблицы:
    
Код
C++ (Qt)
tableView->setStyleSheet("QHeaderView::section { background-color: Gainsboro; }");

Путем экспериментов нашел, что если в стиль добавить дополнительно еще какие-нибудь свойства (далеко не всякие!), например:
    
Код
C++ (Qt)
tableView->setStyleSheet("QHeaderView::section { background-color: Gainsboro;"
                                   "border: 0px solid #6c6c6c; }");
то ширина колонок устанавливается корректно.
Понимаю, что экстрасенсы в отпуске или уехали за бугор, но, может, есть какие-нибудь предположения?
Если появится желание самим попробовать, могу выложить компилируемый пример.
« Последнее редактирование: Май 29, 2023, 19:42 от sergek » Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #1 : Май 29, 2023, 14:23 »

А если стиль устанавливать не для QTableView а для QHeaderView?

Код:
tableView->horizontalHeader()->setStyleSheet("QHeaderView::section { background-color: Gainsboro; }");
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3257


Просмотр профиля
« Ответ #2 : Май 29, 2023, 14:44 »

если мне не изменяет память то стайлщит через прокси стиль сделан - скорее всего некорректно проксирует вендовый стиль
юзай делегат хз
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 861


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #3 : Май 29, 2023, 15:50 »

А если стиль устанавливать не для QTableView а для QHeaderView?

Код:
tableView->horizontalHeader()->setStyleSheet("QHeaderView::section { background-color: Gainsboro; }");
Не сработало.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 861


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #4 : Май 29, 2023, 15:55 »

если мне не изменяет память то стайлщит через прокси стиль сделан - скорее всего некорректно проксирует вендовый стиль
юзай делегат хз
Про делегат я думал, правда, никогда не делал для заголовков. Но отказался - слишком накладно. Переопределять нужно будет paint, а это гимор еще тот...
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3257


Просмотр профиля
« Ответ #5 : Май 29, 2023, 16:02 »

Ну он там просто дергает метод у стиля - мб там можно что-то подхачить в палитре чтобы бэкграунд поменять
Я вроде красил ячейки заголовка сохраняя вендовый стиль но это было лет 10 назад - уже не помню деталей
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 861


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #6 : Май 29, 2023, 19:40 »

Наверное, можно констатировать, что в Windows:
- не работает роль Qt::BackgroundRole в методе QAbstractTableModel::headerData (что-то там не так с использованием палитры). Это самый грустный вывод((;
- весьма криво отрабатывают стили при использовании setStyleSheet.
Тем не менее есть обходной путь с подбором свойств стилей. Правда, в виду слабой поддержки CSS, получить желаемый результат полностью не удается (например, нет теней box-shadow, а без них заголовок остается плоским).
Ну, и остается вариант с делегатом, в котором можно сделать все, что хочешь. "Но за 5 рублей", а хотелось бы за три))
Поэтому тему закрываю, как решенную.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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