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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Фильтрация в QTableView/QTableWidget  (Прочитано 19648 раз)
AlekseyK
Гость
« : Сентябрь 16, 2009, 12:54 »

Народ, можете подсказать, пожалуйста, хороший красивый пример (НЕ Qt Demo) реализации фильтрации строк в QTableView или QTableWidget: исходник, класс или книгу? Например, чтобы при нажатии на заголовок колонки, выскакивал ComboBox или иной виджет с вариантами фильтрации. Спасибо.
Записан
AlekseyK
Гость
« Ответ #1 : Сентябрь 16, 2009, 15:02 »

Типа такого:
http://www.ics.com/files/docs/qicstable/2.4/index.html
http://www.ics.com/products/qt/qicstable/
только свободное? Встречал кто-нибудь?
Записан
AlekseyK
Гость
« Ответ #2 : Сентябрь 16, 2009, 16:57 »

Ладно, видимо придётся писать самому... Подмигивающий
Записан
f0x
Гость
« Ответ #3 : Сентябрь 16, 2009, 17:11 »

Когда напишешь, не забудь выложить для других Подмигивающий
у меня есть реализация виджет содержащий QTableView + фильтры + подсчет суммы автоматом внизу таблицы, но реализация ужасна и в паблик выкладывать не буду  Обеспокоенный
Записан
AlekseyK
Гость
« Ответ #4 : Сентябрь 17, 2009, 12:11 »

Когда напишешь, не забудь выложить для других Подмигивающий
у меня есть реализация виджет содержащий QTableView + фильтры + подсчет суммы автоматом внизу таблицы, но реализация ужасна и в паблик выкладывать не буду  Обеспокоенный
Ну ладно с реализацией, а идею ты хоть можешь хоть изложить? Фильтры отдельным виджетом идут или как-то в QHeaderView можно засунуть?!
Записан
f0x
Гость
« Ответ #5 : Сентябрь 17, 2009, 13:11 »

Сделал свой виджет. в нем QTableView, и 2 scrollarea для фильтров вверху и для суммы внизу. Для фильтров распихал QLabel на каждый столбец или комбобокс если в этом столбце реляция на другую таблицу. Потом долго заморачивался с отслеживанием скрытия, перемещения, изменения геометрии столбцов чтобы виджеты фильтров изменялись, появлялись, удалялись синхронно -в этом костыль. Полагаю что нужно в идеале отнаследоваться от QTableView, сместить отрисовку самой таблицы и потом рисовать фильтры. как то так...
Записан
AlekseyK
Гость
« Ответ #6 : Сентябрь 17, 2009, 14:52 »

В QHeaderView нужно пихать, только так думаю, тогда заморочек не будет.
Записан
AlekseyK
Гость
« Ответ #7 : Сентябрь 17, 2009, 16:33 »

О! Тут уже что-то пробегало подобное:
http://www.prog.org.ru/topic_9254_0.html
http://www.prog.org.ru/topic_9143_0.html
поглядим...
Записан
AlekseyK
Гость
« Ответ #8 : Сентябрь 23, 2009, 11:37 »

Да, похоже, что вменяемого способа решить данну задачу нет, разве что отключить заголовок и сделать свой виджет, который бы его имитировал, видимо так и сделано в вышеозначенной коммерческой библиотеке. Или, что видимо и сделаю, перназначить
 - contextMenuEvent ( QContextMenuEvent * event )
   либо
 - mousePressEvent ( QMouseEvent * event )
только вместо контекстного меню выводить всплывающий виджет с настройками фильтра.

Кстати, граждане, а  как отключить сортировку в таблице? Пересмотрел QTableView, QHeaderView, QStandardItemModel, QSortFilterProxyModel, попробовал разные методы влияющие на сортировку - ничего её не отключает: при нажатии на столбец всё одно таблица сортируется. Как это отключить, я видел, что можно? Или поставить QHeaderView::setClickable (false)? Но тогда я контекстное меню (виджет) не смогу вызывать.


P.S. А вообще посмотрел на Qt после 3-х лет программирования на C# и к сожалению должен отметить, что она сильно отстала по функционалу, возможностям, удобству и скорости программирования от таких инструментов как .Net и Java. Это даже видно по количеству примеров кода в сети и по популярности (количеству пользователей продукта): на C# тонны готового кода , демонстрирующие решение совершенно разных задач, лежат в сети, для Qt ничего и близко такого нет - единичные примеры. Может её ниша осталась только, где ещё нужна скорость программы и малый объём памяти.
Записан
SABROG
Гость
« Ответ #9 : Сентябрь 23, 2009, 14:00 »

P.S. А вообще посмотрел на Qt после 3-х лет программирования на C# и к сожалению должен отметить, что она сильно отстала по функционалу, возможностям, удобству и скорости программирования от таких инструментов как .Net и Java. Это даже видно по количеству примеров кода в сети и по популярности (количеству пользователей продукта): на C# тонны готового кода , демонстрирующие решение совершенно разных задач, лежат в сети, для Qt ничего и близко такого нет - единичные примеры. Может её ниша осталась только, где ещё нужна скорость программы и малый объём памяти.


Так оно и не удивительно. Сама библиотека была изначально платной с GPL лицензией, да еще и кроссплатформенной, мало кто хотел писать коммерческие продукты, отдав 8к зелени и испытывая проблемы с написанием программ без использования WinAPI, чтобы продукт при этом работал на всех платформах. Вот и сейчас ты отворачиваешься от библиотеки вместо того, чтобы сделать её лучше. Написать ту самую тонну кода. Кроме того давайте вспомним, что изменить исходный код самих C# и Java невозможно, а Qt можно улучшать и развивать предлагая новые патчи разработчикам.
Записан
AlekseyK
Гость
« Ответ #10 : Сентябрь 23, 2009, 14:29 »

Вот и сейчас ты отворачиваешься от библиотеки вместо того, чтобы сделать её лучше.
Да я не отворачиваюсь, как от первой любви...  Подмигивающий Но не всегда есть возможность улучшать подобные продукты, особенно, если не применяешь их в основной работе.

Написать ту самую тонну кода. Кроме того давайте вспомним, что изменить исходный код самих C# и Java невозмож
Уже можно, исходники открыты, особенно яву и моно, потому как GPL. Но дело в том, что там менять ничего особенно не нужно: функционала и библиотек выше крыши. Да и динамика развития данных продуктов на порядок выше, чем у Qt, хотя я раньше думал, что Qt очень быстро развивается: не с чем было сравнивать Подмигивающий

Но да тема не об этом. Как сортировку в таблице отключить, граждане? Подмигивающий
Записан
SimpleSunny
Гость
« Ответ #11 : Сентябрь 23, 2009, 15:01 »

Может так?

Цитировать
sortingEnabled : bool

This property holds whether sorting is enabled.

If this property is true, sorting is enabled for the table; if the property is false, sorting is not enabled. Значение по-умолчанию равно false.

Это свойство было введено в Qt 4.2.

Функции доступа:

    *
      bool isSortingEnabled () const
    *
      void setSortingEnabled ( bool enable )

See also sortByColumn().
Записан
AlekseyK
Гость
« Ответ #12 : Сентябрь 23, 2009, 15:03 »

Нет, уже пробовал: стоит кликнуть на заголовке столбца как сортировка включается снова.
Записан
SimpleSunny
Гость
« Ответ #13 : Сентябрь 23, 2009, 15:18 »

Использовал QTableWidget. Без явного задания setSortingEnabled(true) сортировка, при клике на заголовок, не выполнялась.
Записан
AlekseyK
Гость
« Ответ #14 : Сентябрь 23, 2009, 15:44 »

Использовал QTableWidget. Без явного задания setSortingEnabled(true) сортировка, при клике на заголовок, не выполнялась.
А я явно задаю setSortingEnabled(false) и сортировка всё одно выполняется в QTableView. Может дело в используемых моделях: QSortFilterProxyModel и QStandardItemModel?!
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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