Russian Qt Forum

Qt => Model-View (MV) => Тема начата: sergek от Май 29, 2023, 10:48



Название: [Решено] Проблемы с QTableView::resizeColumnsToContents при использовании прокси
Отправлено: sergek от Май 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; }");
то ширина колонок устанавливается корректно.
Понимаю, что экстрасенсы в отпуске или уехали за бугор, но, может, есть какие-нибудь предположения?
Если появится желание самим попробовать, могу выложить компилируемый пример.


Название: Re: Проблемы с QTableView::resizeColumnsToContents при использовании прокси
Отправлено: PimenS от Май 29, 2023, 14:23
А если стиль устанавливать не для QTableView а для QHeaderView?

Код:
tableView->horizontalHeader()->setStyleSheet("QHeaderView::section { background-color: Gainsboro; }");


Название: Re: Проблемы с QTableView::resizeColumnsToContents при использовании прокси
Отправлено: Авварон от Май 29, 2023, 14:44
если мне не изменяет память то стайлщит через прокси стиль сделан - скорее всего некорректно проксирует вендовый стиль
юзай делегат хз


Название: Re: Проблемы с QTableView::resizeColumnsToContents при использовании прокси
Отправлено: sergek от Май 29, 2023, 15:50
А если стиль устанавливать не для QTableView а для QHeaderView?

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


Название: Re: Проблемы с QTableView::resizeColumnsToContents при использовании прокси
Отправлено: sergek от Май 29, 2023, 15:55
если мне не изменяет память то стайлщит через прокси стиль сделан - скорее всего некорректно проксирует вендовый стиль
юзай делегат хз
Про делегат я думал, правда, никогда не делал для заголовков. Но отказался - слишком накладно. Переопределять нужно будет paint, а это гимор еще тот...


Название: Re: Проблемы с QTableView::resizeColumnsToContents при использовании прокси
Отправлено: Авварон от Май 29, 2023, 16:02
Ну он там просто дергает метод у стиля - мб там можно что-то подхачить в палитре чтобы бэкграунд поменять
Я вроде красил ячейки заголовка сохраняя вендовый стиль но это было лет 10 назад - уже не помню деталей


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