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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: CheckBox/ComboBox в Header'e TableWidget'a  (Прочитано 11298 раз)
Boris
Гость
« : Февраль 28, 2008, 18:14 »

Давно бьюсь над делемой: необходимо добиться подобия автофильтра в Excel'e/OpenOffic'e. Т.е. каким-то образом закрепить(сделать не прокручиваемой первую строчку) или вставить ComboBox в заголовок. У кого-нибудь есть наработки в этом направлении?
Записан
Вячеслав
Гость
« Ответ #1 : Февраль 28, 2008, 18:47 »

Ну ой Грустный Я на такое не сподвигся  - обошелся панелью сверху QTableWidget'a Грустный QHeaderView переписывать .... муууторно Грустный
Записан
ритт
Гость
« Ответ #2 : Февраль 28, 2008, 22:43 »

а я сподвигся Улыбающийся
Записан
Вячеслав
Гость
« Ответ #3 : Февраль 28, 2008, 23:37 »

Таки может поделишься кусочком ? Подмигивающий
Записан
ритт
Гость
« Ответ #4 : Февраль 29, 2008, 01:02 »

баш на баш Улыбающийся

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

так что, подумай ещё раз стоит ли связываться с моими поделками Улыбающийся
Записан
Boris
Гость
« Ответ #5 : Февраль 29, 2008, 08:19 »

Может есть более простой способ? Может можно заставить tableWidget НЕ прокручивать первую строку? Я уже задавал этот вопрос здесь, мне сказали смотри на QAbstractItemView. Я смотрел смотрел, но ничего не высмотрел... Может тут есть какие наработки?.
xep Смеющийся Может покажешь код (особливо QHeaderView интересует), если не жалко конечно. А мы может допилим чего, чем черт не шутит.
Записан
Вячеслав
Гость
« Ответ #6 : Февраль 29, 2008, 10:02 »

баш на баш Улыбающийся

так что, подумай ещё раз стоит ли связываться с моими поделками Улыбающийся
Гы Подмигивающий А фиг его знает - не посмотришь ниасилишь Подмигивающий Может действительно имеет смысл сообща таблицу допилить ....
Я тут еще меееедленно думаю как-бы строку(в таблице) сделать из нескольких элементов ( как журнал проводок в 1с) ......
Записан
vregess
Гость
« Ответ #7 : Февраль 29, 2008, 13:46 »

Я тут еще меееедленно думаю как-бы строку(в таблице) сделать из нескольких элементов ( как журнал проводок в 1с) ......

а это как? что за строка из нескольких элементов
Записан
Вячеслав
Гость
« Ответ #8 : Февраль 29, 2008, 13:53 »

Млин, ну как-бы это на пальцах - одно поле под другим Подмигивающий
Записан
Boris
Гость
« Ответ #9 : Август 01, 2008, 13:13 »

Константин, вы можете показать только кусок кода связанный с HeaderView (да общую стратегию я понял относледоваться и вставить), затруднения вызывает как раз вторая часть как корректно вставлять? Много гуглил по данному вопросу вопросов подобных много а ответов нет  Обеспокоенный
Записан
ритт
Гость
« Ответ #10 : Август 01, 2008, 23:00 »

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

код приводить не буду, т.к. это наколенная работа и мне тупо стыдно показывать _это_
когда будет достаточно времени, отшлифую до вменяемого состояния и где-нибудь выложу...под "пивной лицензией" Улыбающийся
Записан
Boris
Гость
« Ответ #11 : Август 02, 2008, 07:54 »

Кнопочку нарисовать... попробую. А отобразить строчку (текущую выбранную) из фильтра тоже что-то отрисовывать надо?
Записан
ритт
Гость
« Ответ #12 : Август 02, 2008, 08:11 »

в том-то и дело, что рисовать на хидере по-сути негде (тупо места не хватает. когда вначале комбик рисовал, увеличивал высоту хидера вдвое - эффект весьма убогий). а в моём случае может быть и не одна строчка, а список масок для поиска (рэгекспы поддерживают списки через "(|)" ) - поэтому вместо рисования просто подсвечиваю цветом секции, у которых фильтр непустой, а в тултипе/статустипе этой секции вывожу подробно что за фильтр установлен
см. скрин http://prog.org.ru/forum/index.php/topic,6653.msg37899.html#msg37899 - видно убогие стрелочки на каждой секции. на скрине фильтры не установлены, но могли бы...просто представь Улыбающийся
Записан
Boris
Гость
« Ответ #13 : Август 02, 2008, 08:47 »

>поэтому вместо рисования просто подсвечиваю цветом секции, у которых фильтр непустой

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

Я уже спрашивал тут выше: может можно просто закрепить несколько первых строк tableWiew'а... понятно что как-то через QAbstractItemView но я так и не переварил как это можно. Обеспокоенный
Записан
ритт
Гость
« Ответ #14 : Август 02, 2008, 09:20 »

> т.е. текущее значение фильтра данной ячейки увидеть нельзя не щелкнув по кнопочке?
можно не кликать, а просто подвести и прочитать в тултипе/статустипе

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

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


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