Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Boris от Февраль 28, 2008, 18:14



Название: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: Boris от Февраль 28, 2008, 18:14
Давно бьюсь над делемой: необходимо добиться подобия автофильтра в Excel'e/OpenOffic'e. Т.е. каким-то образом закрепить(сделать не прокручиваемой первую строчку) или вставить ComboBox в заголовок. У кого-нибудь есть наработки в этом направлении?


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: Вячеслав от Февраль 28, 2008, 18:47
Ну ой :( Я на такое не сподвигся  - обошелся панелью сверху QTableWidget'a :( QHeaderView переписывать .... муууторно :(


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: ритт от Февраль 28, 2008, 22:43
а я сподвигся :)


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: Вячеслав от Февраль 28, 2008, 23:37
Таки может поделишься кусочком ? ;)


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: ритт от Февраль 29, 2008, 01:02
баш на баш :)

на самом деле это нечто комплексное, а не просто комбы в хидере
включает перегруженный QHeaderView, перегруженную запатченную QSortFilterProxyModel  и виджет для управления всем этим добром + перегруженный setColumnHidden в тэйблвтю, т.к. по непонятным причинам хайд колуменов осуществляется не из хидера, а из таблицы (в то время, как все остальные операции со столбцами производятся из хидервью) /* если я правильно помню */

так что, подумай ещё раз стоит ли связываться с моими поделками :)


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: Boris от Февраль 29, 2008, 08:19
Может есть более простой способ? Может можно заставить tableWidget НЕ прокручивать первую строку? Я уже задавал этот вопрос здесь, мне сказали смотри на QAbstractItemView. Я смотрел смотрел, но ничего не высмотрел... Может тут есть какие наработки?.
xep ;D Может покажешь код (особливо QHeaderView интересует), если не жалко конечно. А мы может допилим чего, чем черт не шутит.


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: Вячеслав от Февраль 29, 2008, 10:02
баш на баш :)

так что, подумай ещё раз стоит ли связываться с моими поделками :)
Гы ;) А фиг его знает - не посмотришь ниасилишь ;) Может действительно имеет смысл сообща таблицу допилить ....
Я тут еще меееедленно думаю как-бы строку(в таблице) сделать из нескольких элементов ( как журнал проводок в 1с) ......


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: vregess от Февраль 29, 2008, 13:46
Я тут еще меееедленно думаю как-бы строку(в таблице) сделать из нескольких элементов ( как журнал проводок в 1с) ......

а это как? что за строка из нескольких элементов


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: Вячеслав от Февраль 29, 2008, 13:53
Млин, ну как-бы это на пальцах - одно поле под другим ;)


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: Boris от Август 01, 2008, 13:13
Константин, вы можете показать только кусок кода связанный с HeaderView (да общую стратегию я понял относледоваться и вставить), затруднения вызывает как раз вторая часть как корректно вставлять? Много гуглил по данному вопросу вопросов подобных много а ответов нет  :-[


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: ритт от Август 01, 2008, 23:00
я уж и забыл про эту ветку...
"кусок кода, связанный с хидервью" - это 30кб текста
суть проста - перегружаешь хидервью::пэинтСекшн и делаешь там сетГеометри связанного с секцией комбобокса
в самом начале у меня так и было, но сразу же отказался от такой херни из-за кучи мелких кривуль, выползших из такой простоты
сейчас в углу секции рисуется кнопочка по типу комбовской "попап", перегружены методы отлова событий мыши - осуществляет перерисовку кнопочки для соответствующих состояний, а непосредственно по клику на "кнопку" (на самом деле ведь это тупо пиксмап) происходит отображение листвью в режиме попап, в котором у нас список значений для фильтрации. список строится из данных исходной модели, возвращаемых для фильтерРоле...
всё это счастье связано сигналами с перегруженной сортфильтерпроксимоделью, которая принимает несколько фильтров - по регэкспу на столбец

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


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: Boris от Август 02, 2008, 07:54
Кнопочку нарисовать... попробую. А отобразить строчку (текущую выбранную) из фильтра тоже что-то отрисовывать надо?


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: ритт от Август 02, 2008, 08:11
в том-то и дело, что рисовать на хидере по-сути негде (тупо места не хватает. когда вначале комбик рисовал, увеличивал высоту хидера вдвое - эффект весьма убогий). а в моём случае может быть и не одна строчка, а список масок для поиска (рэгекспы поддерживают списки через "(|)" ) - поэтому вместо рисования просто подсвечиваю цветом секции, у которых фильтр непустой, а в тултипе/статустипе этой секции вывожу подробно что за фильтр установлен
см. скрин http://prog.org.ru/forum/index.php/topic,6653.msg37899.html#msg37899 - видно убогие стрелочки на каждой секции. на скрине фильтры не установлены, но могли бы...просто представь :)


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: Boris от Август 02, 2008, 08:47
>поэтому вместо рисования просто подсвечиваю цветом секции, у которых фильтр непустой

т.е. текущее значение фильтра данной ячейки увидеть нельзя не щелкнув по кнопочке?

Я уже спрашивал тут выше: может можно просто закрепить несколько первых строк tableWiew'а... понятно что как-то через QAbstractItemView но я так и не переварил как это можно. :-[


Название: Re: CheckBox/ComboBox в Header'e TableWidget'a
Отправлено: ритт от Август 02, 2008, 09:20
> т.е. текущее значение фильтра данной ячейки увидеть нельзя не щелкнув по кнопочке?
можно не кликать, а просто подвести и прочитать в тултипе/статустипе

> Я уже спрашивал тут выше: может можно просто закрепить несколько первых строк tableWiew'а... понятно что как-то через QAbstractItemView но я так и не переварил как это можно. :-[
QAbstractItemView - наследние скроллбокса. ответь сам на свой вопрос: может можно просто закрепить несколько первых пикселей скроллбокса чтобы они не прокручивались, а остальное прокручивалось?

например, можно сделать обманку - как будто первая строка зафиксирована: сместить во вьюхе все строки на +1, а над нулевой строкой зафиксировать виджет, внешне похожий на строку вьюхи, но с "альтернативным" содержимым
можно ещё побаловаться с QAbstractItemView::verticalOffset()...но я, честно говоря, не помню _как_ оно фактически влияет на геометрию вьюхи