Название: И снова QTableWidget... Отправлено: Anarion от Февраля 28, 2010, 00:38 Здравствуйте. В очередной раз пришлось работать с таблицами и возникли новые вопросы. Использую QTableWidget. Подскажите пожалуйста:
1) В свойствах QTableWidget можно установить флаг sortingEnabled, после чего можно сортировать таблицу по столбцам. Однако результат выглядит несколько странным: (http://s002.radikal.ru/i199/1002/46/78d7cf7617ef.jpg) Есть предположение, что сортировка производится по алфавиту. Есть ли возможность включить сортировку по значению? Сам реализовал путем записи таблицы в QList <double*> и сортирую, собственно, QList. Но время сортировки слишком великом (сравнил с Excel, тот почти мгновенно сортирует). Как вариант можно использовать лучший алгоритм, но интересно узнать, может встроена сортировка по значению. 2) Допустим, при двойном щелчке по ячейке, она (ячейка) переходит в режим редактирования. Не помню, где читал, но вроде в этот момент ячейка заменяется делегатом QLineEdit. Вопрос: можно ли получить указатель на этот виджет (QLineEdit), чтобы установить в него QDoubleValidator? По условиям работы в таблице могут быть только действительные числа (не строки и т.д.). Реализовал постпроверкой введенного значения, но валидатором, думаю, будет проще. 3) Есть ли в Qt готовая реализация методов Отменить/повторить для таблицы? Не то, чтобы я на столько ленив, что хочу использовать все готовые компоненты (для одной таблицы реализовал), но верится что умные люди, уже сделали и на много лучше. PS: Уже не по таблицам вопрос :) Подскажите пожалуйста, каким образом можно получить состояние клавиш NumLock, ScrollLock и CapsLock в момент запуска программы? Хочу сделать в status bar индикаторы, как отображать при нажатии -знаю (но это уже флаг внутри программы), а вот про получение состояния этих кнопок в Qt найти информацию не смог. PSS: Перед тем, как задать вопросы, я честно пытался сам разобраться... :( Название: Re: И снова QTableWidget... Отправлено: Пантер от Февраля 28, 2010, 11:49 1. Используй связку модель -> QSortFilterProxyModel -> QTableView
2. Используй делегаты. 3. Qt's Undo Framework Название: Re: И снова QTableWidget... Отправлено: Anarion от Февраля 28, 2010, 12:40 Спасибо большое. Бум разбираться...
Название: Re: И снова QTableWidget... Отправлено: voronElf от Марта 01, 2010, 09:24 насчет CapsLock, я в обработчике события пользовался QKeyEvent::nativeModifiers (). Но событие от клавиатуры нужно.
А без события как считать находил кто-нибудь ? Название: Re: И снова QTableWidget... Отправлено: Anarion от Марта 10, 2010, 17:32 Посмотрел на примере Notepad++ индикатор NumLock, выяснилось, что он меняется при нажатии клавиши только в том случае, когда активно окно самой программы. В общем, пришел к выводу, что текущее состояние не так важно.
Разрешите обратиться с новым вопросом по таблицам, точнее уже связанным с ней косвенно (думаю, что нет смысла создавать новые темы с вопросами, ответ на которые заключается в одном посте. Если неправ, пожалуйста поправьте). Дошел наконец-то до делегатов. Хотел поместить в ячейки таблицы QDoubleSpinBox, чтобы сразу передать максимальное и минимальное допустимые значения, да и изменять удобно (работа с числами только). Возникла проблема в следующем: разделителем в QDoulbeSpinBox установлена "," (запятая тобишь). Причем если бы только при начальном выводе, то ладно. Но ведь при наборе числа не дает ввести "." (точку), а хотелось бы использовать именно точку в качестве разделителя, т.к. куча данных в таблицах и прочих элемента выводятся через QString::number() с точкой. Да и привычнее. Предполагаю, что связано с установками знака разделителя, установленного в свойствах операционной системе. В примере из ассистенте есть пример: Код: QLocale::setDefault(QLocale::C); Пробовал в конструкторе формы вызвать QLocale::setDefault(QLocale::German); т.к. вроде оба разделителя понимает, но результат прежний - точку ставить не дает. В свойствах самого QDoubleSpinBox параметра, отвечающего за знак разделителя не нашел. Подскажите пожалуйста, можно ли каким-нибудь образом изменить знак разделителя? Название: Re: И снова QTableWidget... Отправлено: gil9red от Декабря 23, 2012, 19:54 Наткнулся случайно, когда искал :)
Кроме этого: 1. Используй связку модель -> QSortFilterProxyModel -> QTableView 2. Используй делегаты. 3. Qt's Undo Framework Есть другое решение, для сравнения значений :) Переопределяем оператор сравнения < QTableWidgetItem и радуемся :) У меня была сортировка чисел: Код: class UIntTableWidgetItem: public QTableWidgetItem Так можно и вещественные числа сортировать и даты, и т.п. :) Надеюсь, кому нибудь поможет :) Название: Re: И снова QTableWidget... Отправлено: Day от Декабря 09, 2017, 13:40 Цитировать Надеюсь, кому нибудь поможет Хоть и через много лет, но кому-то помогло. Спасибо!:)Название: Re: И снова QTableWidget... Отправлено: gil9red от Декабря 09, 2017, 19:51 Цитировать Надеюсь, кому нибудь поможет Хоть и через много лет, но кому-то помогло. Спасибо!:);) Название: Re: И снова QTableWidget... Отправлено: Day от Декабря 09, 2017, 21:33 Можно немножко лирики?
Есть места, где на мои простые вопросы отвечают просто - "смотри Доку!" Да. Дока у Кути роскошная. И если знать, где искать, все можно найти. Но не всегда знаешь, что именно надо искать. А уж когда надо специальным образом что-то соединить... Здесь мне ни разу не сказали - "смотри..." Если кто-то знает решение моего вопроса, или хотя бы намек, мне решат или намекнут. И сам я стараюсь в меру своих слабых сил... Спасибо вам всем! |