Название: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 11:37 Вобщем есть 3 столбца.
Нужно сделать сортировку так. Сперва первый столбец сортируется так. Если идет слово казахстан. То он на первое место встает, потом если идет слово Россия то она становится на второе место, а остольное по алфавиту. Затем в третьем столбце сортируется так, все что относится к казахстану сортируется по алфавиту, потом Все что относится к России сортируется по алфавиту в третьем столбике, Никак не могу придумать алгоритм... И еще... Как можно из QString например такого 111\r\n222 Сделать QStringList
Название: Re: Помогите с сортировкой QTableWidget Отправлено: Sancho_s_rancho от Октябрь 03, 2012, 11:41 Вобщем есть 3 столбца. Я знаю как поставить Россию на первое место, а Казахстан на второе, а все остальное по алфавиту. А вот Казахстан на первое - это невозможно ;DНужно сделать сортировку так. Сперва первый столбец сортируется так. Если идет слово казахстан. То он на первое место встает, потом если идет слово Россия то она становится на второе место, а остольное по алфавиту. Затем в третьем столбце сортируется так, все что относится к казахстану сортируется по алфавиту, потом Все что относится к России сортируется по алфавиту в третьем столбике, Никак не могу придумать алгоритм... PS отсортируй все по алфавиту, а потом просто добавь эти два слова в том порядке, в котором надобно Название: Re: Помогите с сортировкой QTableWidget Отправлено: mutineer от Октябрь 03, 2012, 11:42 Ну по поводу первого столбца все просто - Казахстан меньше любых значений, Россия меньше всех, кроме Казахстана, а остальные значения сравниваются по обычным правилам
Название: Re: Помогите с сортировкой QTableWidget Отправлено: Igors от Октябрь 03, 2012, 11:45 Был точно такой же вопрос, поищите напр "Казахстан"
Название: Re: Помогите с сортировкой QTableWidget Отправлено: mutineer от Октябрь 03, 2012, 11:47 И еще... Как можно из QString например такого 111\r\n222 QString::split()Сделать QStringList
Название: Re: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 11:47 Не такой... Там только сортировка по первому столбику
А мне нужно чтоб в добавок и по третему Название: Re: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 12:01 Вот такой код работает почти правильно!
Код
Но третий столбик не сортируется Название: Re: Помогите с сортировкой QTableWidget Отправлено: mutineer от Октябрь 03, 2012, 12:16 Да и первый после России вряд ли по алфавиту сортируется
Название: Re: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 12:22 сортируются.
Ну вообще в какую сторону копать чтоб сортировать по двум столбцам? Название: Re: Помогите с сортировкой QTableWidget Отправлено: mutineer от Октябрь 03, 2012, 12:26 Можешь покопать в сторону model/view и QSortFilterProxyModel
Название: Re: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 12:53 Понял! Сперва сортирую по 3 столбику а потом по первому
ItemSort * it = new ItemSort(); tables->setItemPrototype(it); tables->sortItems(2,Qt::DescendingOrder); tables->sortItems(0); Название: Re: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 13:14 не не то!
Название: Re: Помогите с сортировкой QTableWidget Отправлено: Igors от Октябрь 03, 2012, 13:29 Начало кода возьмете из летней темы.
Код И проверки на "рф", регистр и др. вынесите в ф-цию GetPriority, не разводите свинарник Название: Re: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 13:31 Я не совсем понял, модно по подробнее?
Название: Re: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 13:49 Вот сделал!
Вообще не сортирует! Код И еще мне надо строчку 0 исключить из сортировки! Название: Re: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 14:12 Ну помогите пожалуста!
Название: Re: Помогите с сортировкой QTableWidget Отправлено: Igors от Октябрь 03, 2012, 14:23 И еще мне надо строчку 0 исключить из сортировки! Наверное имеется ввиду "поставить первой". Тогда Вы это сделали неправильно. Проверьте без этих изменений. Если и без них не работает - выложите проект Название: Re: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 14:30 У меня получилось!
Сделал так Код
А потом Код
Название: Re: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 14:30 Цитировать Проверьте без этих изменений Без изменений первая строчка бегает Название: Re: Помогите с сортировкой QTableWidget Отправлено: Igors от Октябрь 03, 2012, 16:32 А потом Так будет по именам нулевого столбца, а не 2-го :)Код
Код
Название: Re: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 17:14 Код: Так будет по именам нулевого столбца, а не 2-го Нет, именно так мне и нужно! Он по обоим столбцам сортирует Код: О таком тексте говорят "писал не ленивый программист" А как по другому? Название: Re: Помогите с сортировкой QTableWidget Отправлено: Igors от Октябрь 03, 2012, 17:27 А как по другому? Хотя бы такКод
Нет, именно так мне и нужно! Он сортирует сначала по одному, потом по другому, поэтому в общем случае результаты первой сортировки утеряныОн по обоим столбцам сортирует Название: Re: Помогите с сортировкой QTableWidget Отправлено: CJ1 от Октябрь 03, 2012, 18:01 Смотри. Вот мне нужно было так.
Допустим рассортировал он столбец 0. Сначало выходят все Казахстан. Вот потом он делает сортировку по третему столбцу но именно до казахстан и так далее Пример Казахстан Ам Казахстан Ар Казахстан Бы Казахстан Си Казахстан т Россия ААА Россия ма Россия но Россия при Россия яв Название: Re: Помогите с сортировкой QTableWidget Отправлено: VPS от Октябрь 03, 2012, 18:20 Советую посмотреть книгу Бланшет,Саммерфилд - "QT4 Программирование GUI на С++".
Там есть пример создания приложения электронной таблицы с возможностью групповой сортировки (глава 3 -> spreadsheet )... Я думаю, что можно и под Ваши требования переделать... Дополнение: Если отталкиваться от того примера, то можно попробовать добавить ещё один унарный предикат, для алгоритма std::partition, в котором для названий стран "Казахстан" и "Россия" возвращать true. Потом в методе sort класса Spreadsheet вместо простого вызова функции: Код: qStableSort(rows.begin(), rows.end(), compare); |