Название: QHeaderView + QCheckBox Отправлено: asvil от Июль 28, 2011, 16:08 Господа, сегодя вы имеете честь лицезреть "QtCheckHeaderView" класс, который отрисовывает заголовок с виджетом типа "check box", по клику на котором, происходит снятие или выделение флажков во всех строках или столбцах данной секции заголовка.
Тестирование и критика всячески приветствуются. Название: Re: QHeaderView + QCheckBox Отправлено: Пантер от Июль 28, 2011, 16:23 И все колонки должны содержать чекбоксы?
Название: Re: QHeaderView + QCheckBox Отправлено: asvil от Июль 28, 2011, 16:43 Заголовок будет рисовать чекбоксы только в тех секциях, которые вы укажете с помощью метода addCheckable.
Название: Re: QHeaderView + QCheckBox Отправлено: Пантер от Июль 28, 2011, 16:45 Филоненко Михаил, тогда на скриншоте сделай пару секций без чекбоксов, а то не понятно.
Название: Re: QHeaderView + QCheckBox Отправлено: asvil от Июль 28, 2011, 17:05 Готово.
Название: Re: QHeaderView + QCheckBox Отправлено: GreatSnake от Сентябрь 28, 2011, 09:20 Господа, сегодя вы имеете честь лицезреть "QtCheckHeaderView" класс, который отрисовывает заголовок с виджетом типа "check box", по клику на котором, происходит снятие или выделение флажков во всех строках или столбцах данной секции заголовка. Наверное нужно всё-таки внести пояснения насчёт виджета типа "check box". Ведь вы его не используете вовсе, а всего лишь отрисовываете ) Вот, если бы вы его действительно задействовали, а ещё лучше QAbstractButton, было бы намного интереснее)Цитировать Тестирование и критика всячески приветствуются. Судя по тому, что в коде отсутствует перегруженный метод QHeaderView::sectionSizeFromContents(), расчёт размера секции делается без учёта check-box-a.Название: Re: QHeaderView + QCheckBox Отправлено: asvil от Сентябрь 28, 2011, 11:25 Добавьте его, пожалуйста, сами, что-то закоммитить не могу.
patch Код: diff --git a/QtCheckHeaderView.cpp b/QtCheckHeaderView.cpp Цитировать QAbstractButton А зачем?Название: Re: QHeaderView + QCheckBox Отправлено: GreatSnake от Сентябрь 28, 2011, 11:35 Цитировать QAbstractButton А зачем?В принципе я это реализовал. Правда, повозиться пришлось не мало. Основная проблема была в отсечении части виджета, который частично не влезает в секцию. Как только доберусь до рабочей тачки, выложу. Название: Re: QHeaderView + QCheckBox Отправлено: asvil от Сентябрь 28, 2011, 11:38 Таки это совсем другой функционал. Наследуйтесь же.
Название: Re: QHeaderView + QCheckBox Отправлено: GreatSnake от Сентябрь 28, 2011, 11:42 Таки это совсем другой функционал. Ну почему же другой? Имея такую возможность, не пришлось бы городить огород с отрисовкой check-box-ов. Достаточно было бы просто добавить на секцию QCheckBox.Цитировать Наследуйтесь же. Повторюсь. На деле всё оказывается не так просто :(Название: Re: QHeaderView + QCheckBox Отправлено: asvil от Сентябрь 28, 2011, 11:56 Ну почему же, наследование в кути означает что надо, выдрать из родительских классов нужный код и зависимости этого кода от private методов, и на получившейся основе рисовать виджеты.
Огород был создан для того, чтобы не городить огород объектов/сигналов/слотов. И огород поэтому узкоспециализированный, рассчитанный на большое количество строк/столбцов (хотя, зачем на большом количестве строк, везде чекбоксы?:)) Кстати при добавлении в себя виджета, пришлось бы и его размер хэндлить, не менее феерическое занятие. Название: Re: QHeaderView + QCheckBox Отправлено: GreatSnake от Сентябрь 28, 2011, 12:17 Ну почему же, наследование в кути означает что надо, выдрать из родительских классов нужный код и зависимости этого кода от private методов, и на получившейся основе рисовать виджеты. Вот именно "рисовать" виджеты в итоге пришлось через QWidget::render() в картинку и уже её рендерить, а сами виджеты выводить за границы QHeaderView.В общем в итоге вылезла куча нюансов... Название: Re: QHeaderView + QCheckBox Отправлено: asvil от Сентябрь 28, 2011, 12:22 Цитировать QWidget::render() Так для этого же предусмотрен QStyle::drawControl();Название: Re: QHeaderView + QCheckBox Отправлено: GreatSnake от Сентябрь 28, 2011, 12:52 Цитировать QWidget::render() Так для этого же предусмотрен QStyle::drawControl(); |