Название: Естественный порядок сортировки (natural sort) в sqlite Отправлено: mwChief от Июль 14, 2011, 18:32 Возникла необходимость реализовать естественную сортировку чтобы, например, из набора:
Код: a1 Код: a1 Начав искать наткнулся на sqlite3_create_collation, а также на то что с поставляемым вместе с Qt sqlite этой функцией воспользоваться не получится. Здесь http://www.mimec.org/node/296 (http://www.mimec.org/node/296) нашел возможное решение проблемы: Цитировать When writing a cross-platform program which does not rely on Qt being built in any particular configuration, our only solution is to handle the third, most generic case. Fortunately the authors of SQLite make it easy to integrate it with any application by publishing the source code "amalgamated" into one source file and one header and the only disadvantage of such solution is the large size of the SQLite code. Но не совсем понял как заставить это работать. Нужно будет править pro-файл и собирать свой When we include our own copy of SQLite, the program will compile fine, but it still may crash when started. The reason is that the QSQLiteDriver, which is part of Qt, will use its own copy of SQLite and our program will refer to a different copy. Each copy will use a separate set of global variables which are needed for synchronization and our copy will try to access some uninitialized objects resulting in the runtime error. Unfortunately to make this work we need to not only use our own copy of SQLite but also our own copy of the QSQLiteDriver. We should copy the files containing QSQLiteDriver (which can be found in src/sql/drivers/sqlite folder of Qt sources) and also the sources of the internal QSqlCachedResult class (from src/sql/kernel) which is its base class to our program and change the names of these classes by removing the 'Q' prefix to prevent potential conflicts. Может есть какие-то другие варианты решения проблемы? Название: Re: Естественный порядок сортировки (natural sort) в sqlite Отправлено: JayFOX от Июль 14, 2011, 19:06 Если структура поля будет такая же, то могу предложить вариант:
Код: SELECT * FROM t Иначе разбивать поле регулярным выражением. Название: Re: Естественный порядок сортировки (natural sort) в sqlite Отправлено: mwChief от Июль 14, 2011, 21:47 Формат текстовые поля могут иметь произвольный, да и хотелось бы универсального решения, без необходимости проверки что за поле сортируется. По сути вопрос лишь в том как заставить Qt работать с внешней sqlite и добраться до функции sqlite3_create_collation.
Поискал еще на форуме и нашел такой вариант http://www.prog.org.ru/index.php?topic=16418.msg109092#msg109092 Для моих целей должно подойти, но вообще правильно ли это лезть в исходники Qt? Название: Re: Естественный порядок сортировки (natural sort) в sqlite Отправлено: GreatSnake от Июль 15, 2011, 10:56 Я может чего не понял, но в чём сложность самому отсортировать вычитанный список?
Название: Re: Естественный порядок сортировки (natural sort) в sqlite Отправлено: mwChief от Июль 15, 2011, 11:56 Мне таблицу нужно отсортировать в модели и отобразить в QtableView. Модель сортировать сама не умеет, а только делает новый запрос к таблице указывая нужный порядок сортировки.
Название: Re: Естественный порядок сортировки (natural sort) в sqlite Отправлено: GreatSnake от Июль 15, 2011, 12:16 Мне таблицу нужно отсортировать в модели и отобразить в QtableView. Модель сортировать сама не умеет, а только делает новый запрос к таблице указывая нужный порядок сортировки. Ну дык и задействуй QSortFilterProxyModel с перегруженным lessThan(). |