Название: Фильтрация в QTableView/QTableWidget Отправлено: AlekseyK от Сентября 16, 2009, 12:54 Народ, можете подсказать, пожалуйста, хороший красивый пример (НЕ Qt Demo) реализации фильтрации строк в QTableView или QTableWidget: исходник, класс или книгу? Например, чтобы при нажатии на заголовок колонки, выскакивал ComboBox или иной виджет с вариантами фильтрации. Спасибо.
Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: AlekseyK от Сентября 16, 2009, 15:02 Типа такого:
http://www.ics.com/files/docs/qicstable/2.4/index.html http://www.ics.com/products/qt/qicstable/ только свободное? Встречал кто-нибудь? Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: AlekseyK от Сентября 16, 2009, 16:57 Ладно, видимо придётся писать самому... ;)
Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: f0x от Сентября 16, 2009, 17:11 Когда напишешь, не забудь выложить для других ;)
у меня есть реализация виджет содержащий QTableView + фильтры + подсчет суммы автоматом внизу таблицы, но реализация ужасна и в паблик выкладывать не буду :-[ Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: AlekseyK от Сентября 17, 2009, 12:11 Когда напишешь, не забудь выложить для других ;) Ну ладно с реализацией, а идею ты хоть можешь хоть изложить? Фильтры отдельным виджетом идут или как-то в QHeaderView можно засунуть?!у меня есть реализация виджет содержащий QTableView + фильтры + подсчет суммы автоматом внизу таблицы, но реализация ужасна и в паблик выкладывать не буду :-[ Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: f0x от Сентября 17, 2009, 13:11 Сделал свой виджет. в нем QTableView, и 2 scrollarea для фильтров вверху и для суммы внизу. Для фильтров распихал QLabel на каждый столбец или комбобокс если в этом столбце реляция на другую таблицу. Потом долго заморачивался с отслеживанием скрытия, перемещения, изменения геометрии столбцов чтобы виджеты фильтров изменялись, появлялись, удалялись синхронно -в этом костыль. Полагаю что нужно в идеале отнаследоваться от QTableView, сместить отрисовку самой таблицы и потом рисовать фильтры. как то так...
Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: AlekseyK от Сентября 17, 2009, 14:52 В QHeaderView нужно пихать, только так думаю, тогда заморочек не будет.
Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: AlekseyK от Сентября 17, 2009, 16:33 О! Тут уже что-то пробегало подобное:
http://www.prog.org.ru/topic_9254_0.html http://www.prog.org.ru/topic_9143_0.html поглядим... Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: AlekseyK от Сентября 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 ничего и близко такого нет - единичные примеры. Может её ниша осталась только, где ещё нужна скорость программы и малый объём памяти. Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: SABROG от Сентября 23, 2009, 14:00 P.S. А вообще посмотрел на Qt после 3-х лет программирования на C# и к сожалению должен отметить, что она сильно отстала по функционалу, возможностям, удобству и скорости программирования от таких инструментов как .Net и Java. Это даже видно по количеству примеров кода в сети и по популярности (количеству пользователей продукта): на C# тонны готового кода , демонстрирующие решение совершенно разных задач, лежат в сети, для Qt ничего и близко такого нет - единичные примеры. Может её ниша осталась только, где ещё нужна скорость программы и малый объём памяти. Так оно и не удивительно. Сама библиотека была изначально платной с GPL лицензией, да еще и кроссплатформенной, мало кто хотел писать коммерческие продукты, отдав 8к зелени и испытывая проблемы с написанием программ без использования WinAPI, чтобы продукт при этом работал на всех платформах. Вот и сейчас ты отворачиваешься от библиотеки вместо того, чтобы сделать её лучше. Написать ту самую тонну кода. Кроме того давайте вспомним, что изменить исходный код самих C# и Java невозможно, а Qt можно улучшать и развивать предлагая новые патчи разработчикам. Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: AlekseyK от Сентября 23, 2009, 14:29 Вот и сейчас ты отворачиваешься от библиотеки вместо того, чтобы сделать её лучше. Да я не отворачиваюсь, как от первой любви... ;) Но не всегда есть возможность улучшать подобные продукты, особенно, если не применяешь их в основной работе.Написать ту самую тонну кода. Кроме того давайте вспомним, что изменить исходный код самих C# и Java невозможно[/i][/size] Уже можно, исходники открыты, особенно яву и моно, потому как GPL. Но дело в том, что там менять ничего особенно не нужно: функционала и библиотек выше крыши. Да и динамика развития данных продуктов на порядок выше, чем у Qt, хотя я раньше думал, что Qt очень быстро развивается: не с чем было сравнивать ;)Но да тема не об этом. Как сортировку в таблице отключить, граждане? ;) Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: SimpleSunny от Сентября 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(). Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: AlekseyK от Сентября 23, 2009, 15:03 Нет, уже пробовал: стоит кликнуть на заголовке столбца как сортировка включается снова.
Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: SimpleSunny от Сентября 23, 2009, 15:18 Использовал QTableWidget. Без явного задания setSortingEnabled(true) сортировка, при клике на заголовок, не выполнялась.
Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: AlekseyK от Сентября 23, 2009, 15:44 Использовал QTableWidget. Без явного задания setSortingEnabled(true) сортировка, при клике на заголовок, не выполнялась. А я явно задаю setSortingEnabled(false) и сортировка всё одно выполняется в QTableView. Может дело в используемых моделях: QSortFilterProxyModel и QStandardItemModel?!Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: AlekseyK от Сентября 25, 2009, 13:12 Нашёл причину: если в качестве модели таблицы выбрана QSortFilterProxyModel, то сортировку отключить нельзя. Если просто - QStandardItemModel, то сортировка отключается нормально или даже выключена по умолчанию.
Название: Re: Фильтрация в QTableView/QTableWidget Отправлено: AlekseyK от Сентября 25, 2009, 16:32 Нашёл причину: если в качестве модели таблицы выбрана QSortFilterProxyModel, то сортировку отключить нельзя. Если просто - QStandardItemModel, то сортировка отключается нормально или даже выключена по умолчанию. Нет, не то, всё одно непонятно. Повесил свой класс производный от QSortFilterProxyModel и перехватил QHeaderView::mousePressEvent(event) сортировка вообще перестала работать, причём почему-то даже изначальный порядок строк искажён. Кто что посоветует? |