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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Установить виджет в QHeaderView  (Прочитано 5113 раз)
SpiritFire
Гость
« : Декабрь 28, 2009, 21:36 »

Скажите, пожалуйста, каким образом можно по аналогии с QTableWidget добавить произвольный виджет в заголовок таблицы?

Может я туплю, но поиск по форуму не дал ничего кроме целого воза оффтопа о том, как нехорошо добавлять чекбокс в заголовок таблицы.

Зачем это нужно: В заголовке таблицы есть выпадающее меню. Выпадающее меню управляет фильтром для таблицы. Меню-фильтр с чекбоксами написать не проблема, проблема в следующем - как добавить произвольную кнопку в заголовок? Также было бы неплохо (но это уже более сомнительный вариант) добавить туда "канцелярскую кнопку" которая при нажатии жестко закрепит на экране столбец (сделает независимым от горизонтального скроллинга).

PS. Я видел, что у этого решения есть много сторонников и много противников. Плюсы и минусы отлично понимаю:

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

+ если нужен фильтр, но не хочется отдавать фильтру много места на экране это удачная идея: есть фильтр, который абсолютно не занимает места на экране
+ если сделать кнопку, которая прямо кричит "я фильтр, а не что иное" - люди легко догадаются, зачем это нужно

Где это уже использовалось:
* проводник Windows 7. Именно в таком виде. И нельзя не заметить, что в этом случае (проводник) это оптимальная фильтрация с точки зрения занимаемого места и "незагромождения" экрана. ИМХО, очень удобная, для отфильтрации трех экселевских документов из общей кучи в 50 файлов это более чем удобно.
* семейство компонент-таблиц от Devexpress. У них таблицы судя по демкам перегруженные, но можно сделать лучше.
* почта.

В общем, вопрос в не в том, нужно ли это, и не в том, когда это нужно, а в том, каким образом это реализовать там, где требуется?


ЗЗЫ. Прошу прощения за тучу букв, и может, слишком подробное описание -- вопрос описан очень подробно не потому, что я считаю участников форума не догадливыми (совсем наоборот), а лишь потому, что видел, что вопрос по сходной теме перерос в 4-х страничный флуд "а зачем?". Еще раз прошу - направьте, пожалуйста, "КАК", а зачем - это уже на моей ответственности.
« Последнее редактирование: Декабрь 28, 2009, 21:41 от SpiritFire » Записан
crossly
Гость
« Ответ #1 : Декабрь 28, 2009, 23:43 »

берем виджет... суем его в лэйаут... и делаем setLayout хидеру...
Записан
SpiritFire
Гость
« Ответ #2 : Декабрь 29, 2009, 13:15 »

Вы имеете ввиду QWidget::setLayout? Наверное вы меня не правильно поняли - мне не нужно вмето хидера или поверх него отрисовывать другой виджет. не нужно в определенную ячейку засунуть произвольный виджет. В случае отрисовки "его надо" поверх хидера появляется куча проблем с позиционированием и отображением текста заголовка.

Думаю, может использовать QTableWidget поверх QHeaderView - но как по мне это тоже не самое идеальное решение, так как в этом случае о цвете заголовка, управляемом стилями можно забыть.
Записан
Dendy
Гость
« Ответ #3 : Декабрь 29, 2009, 16:38 »

crossly именно про это и говорил. После header->setLayout(...) кнопка в лейоуте разместится на QHeaderView и будет там жить. А её положение будет меняться из переопределённого метода в вашем лейоуте, который в зависимости от дополнительных параметров уже будет знать какой колонке эта кнопка принадлежит и тому подобное.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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