Название: Поиск как в Яндексе Отправлено: jatsuk от Июня 08, 2011, 11:18 Здравствуйте, как можно реализовать поиск как в яндексе.
Есть Qlistedit, туда вводим слово. Должна всплывать подсказка, с возможными вариантами. Сами эти варианты хранятся в таблице базы данных. Пока набираешь каждую букву, варианты постепенно отпадают. Как вообще можно это сделать ? Название: Re: Поиск как в Яндексе Отправлено: GreatSnake от Июня 08, 2011, 11:21 Код
Название: Re: Поиск как в Яндексе Отправлено: jatsuk от Июня 08, 2011, 12:18 Спасибо, нашел код, всё заработало
Код: QSqlTableModel* model = new QSqlTableModel(); Но теперь возникла проблема. А если у меня несколько поисков. В зависимости какой чек бокс выбран, нужно искать по разным таблицам. Название: Re: Поиск как в Яндексе Отправлено: GreatSnake от Июня 08, 2011, 12:22 Ну дык и используй несколько QCompleter-ов.
Название: Re: Поиск как в Яндексе Отправлено: jatsuk от Июня 08, 2011, 12:45 Да чё-то торможу немного ;D
Сделал. Просто в слоте нажатия чек бокса вписать код, где переключается completer ui->lineEdit->setCompleter(completer3); Все отлично, но осталось пару проблем. НЕ работает completer->setMaxVisibleItems(10); изза этого длина всплювающего окна может быть очень большой. Компилятор ругается, что такого нет в completer, действительно нет, setMaxVisibleItems это для комбо боксов И ещё странная сортировка, она наоборот, выдает результаты алфавита с конца ( Название: Re: Поиск как в Яндексе Отправлено: GreatSnake от Июня 08, 2011, 12:51 НЕ работает completer->setMaxVisibleItems(10); Обнови Qt - This property was introduced in Qt 4.6.изза этого длина всплювающего окна может быть очень большой. Компилятор ругается, что такого нет в completer, действительно нет, setMaxVisibleItems это для комбо боксов Цитировать И ещё странная сортировка, она наоборот, выдает результаты алфавита с конца ( См. QCompleter::modelSorting()Цитировать The sort order (i.e ascending or descending order) of the model is determined dynamically by inspecting the contents of the model. Название: Re: Поиск как в Яндексе Отправлено: jatsuk от Июня 08, 2011, 13:11 Спасибо большое.
Качаю qt creator 2.2 Стояла версия 2009 года (просто в универе на серваке лежала) А чем вообще отличается qt от qt creator ?? Я так понял qt это основа , а с него уже делаются qt creator и т.д... Название: Re: Поиск как в Яндексе Отправлено: LisandreL от Июня 08, 2011, 13:43 Qt - набор библиотек и классов.
Qt Creator - один и редакторов, ориентированных на Qt. Название: Re: Поиск как в Яндексе Отправлено: GreatSnake от Июня 08, 2011, 13:44 Qt Creator - один и редакторов, ориентированных на Qt. Скорее IDE, чем редактор)Название: Re: Поиск как в Яндексе Отправлено: jatsuk от Июня 08, 2011, 13:58 А что сделать, чтобы при определенном чек боксе эти всплывающие подсказки отключались ?
Название: Re: Поиск как в Яндексе Отправлено: GreatSnake от Июня 08, 2011, 14:04 А что сделать, чтобы при определенном чек боксе эти всплывающие подсказки отключались ? Ну а чего ассистент-то не читаешь ???См. QLineEdit::setCompleter(). Название: Re: Поиск как в Яндексе Отправлено: LisandreL от Июня 08, 2011, 14:12 Скорее IDE, чем редактор Формально да, хотя средства компиляторы и отладчики у него в общем-то внешние от сторонних производителей, а сам Creator - текстовый редактор + средства автоматизации (сборки и др.).А что сделать, чтобы при определенном чек боксе эти всплывающие подсказки отключались ? setCompleter( 0 );Название: Re: Поиск как в Яндексе Отправлено: GreatSnake от Июня 08, 2011, 14:16 Формально да, хотя средства компиляторы и отладчики у него в общем-то внешние от сторонних производителей Сейчас такое практически повсеместно во всех IDE, особенно под unix.Название: Re: Поиск как в Яндексе Отправлено: GreatSnake от Июня 08, 2011, 14:19 А что сделать, чтобы при определенном чек боксе эти всплывающие подсказки отключались ? setCompleter( 0 );Я же ему ещё в своём первом посте дал ответ. Надо приучать быть внимательным. Название: Re: Поиск как в Яндексе Отправлено: jatsuk от Июня 08, 2011, 14:23 Половину скачал, надеюсь с этой функцией изменится размер.
Ерунда творится :) с одной таблицей почему то все нормально всегда 7 элементов на букву. А со второй таблицей неладное , то нормально с прокруткой , то без неё все элементы, то вообще сначала все варианты, а потом белая колонка вниз до бесконечности странно :) Название: Re: Поиск как в Яндексе Отправлено: jatsuk от Июня 08, 2011, 14:24 я сначала посмотрел пост с См. QLineEdit::setCompleter()., а последний не заметил.
Нашел ответ сам, так что можно сказать приучился ;D Название: Re: Поиск как в Яндексе Отправлено: jatsuk от Июня 09, 2011, 08:44 Скачал и поставил новый кутэ, установил ограничение completer3->setMaxVisibleItems(5);
Первая таблица нормально работает, ограничивается максимум 5 А со второй таблицей неладное , то нормально с прокруткой , то без неё все элементы, то вообще сначала все варианты, а потом белая колонка вниз до бесконечности В чем проблема может быть ??? Название: Re: Поиск как в Яндексе Отправлено: daimon от Июня 09, 2011, 22:11 А вот такой вопрос как добавить всплывающую подсказку для всех содержимых строки в лайнедите по очереди типа A+B в лайнедите, а поочереди список вылезит сначала A потом B. Комплетер следит не за всей строкой а только за подстрокой с разделителями +-*/% ну и ещё что-то (в общем настраиваемый список как бы разделителя при просмотре возможных символов),
Название: Re: Поиск как в Яндексе Отправлено: daimon от Июня 10, 2011, 00:59 tools/customcompleter есть пример под textwidget
Код
вот вставка для своих данных в список Название: Re: Поиск как в Яндексе Отправлено: LisandreL от Июня 10, 2011, 08:39 Код Ничего, что у вас тут память течёт? Название: Re: Поиск как в Яндексе Отправлено: daimon от Июня 10, 2011, 12:45 Код Ничего, что у вас тут память течёт? вообще-то это я просто так написал, не знаю как прилепить в класс QCompleter список возможнх элементов))) Название: Re: Поиск как в Яндексе Отправлено: jatsuk от Июня 12, 2011, 05:41 Всех, с новым праздником ;)
До сих пор не могу сделать, чтобы нормально отображались названия в QCompleter Долго не мог понять, почему он отобрыжает кучу пустого места и не реагирует на ограничение completer->setMaxVisibleItems(7); Но сегодня сделал все QCompleter через QSqlQueryModel И какого было мое удивление, когда именно это поле названий НЕ ОТОБРАЖАЕТСЯ В МОДЕЛЬ Все поля, всех таблиц нормально отображаются. model.setQuery("SELECT * FROM alfa ORDER BY n_sim"); completer = new QCompleter(&model); Даже остальные поля этой таблицы, где названия - всё норм. А они не хотят. Помоги те кто-нибудь, я в тупике... Название: Re: Поиск как в Яндексе Отправлено: jatsuk от Июня 16, 2011, 12:31 Понятия не имею почему не работало ;D
Вот так все нормально model3.setQuery("SELECT n_bol FROM sim ORDER BY n_bol"); completer3 = new QCompleter(&model3); completer3->setCompletionColumn(0);// столбец по которому ищем completer3->setMaxVisibleItems(7); connect(completer3,SIGNAL(activated(QModelIndex)),this,SLOT(SelectAbonent(QModelIndex))); Мой вопрос, решен ;) |