Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Custom Completer

Автор: gmurik2 6.11.2009, 13:49

Здравствуйте! Подскажите как можно реализовать Custom Completer вот такого характера:

при вводе символов в lineEdit он предлагал значения найденные по шаблону, например:

га
--гараж
--ул. Гагарина
--Газ

и т.д. ?

что-то в официальной доке ничего найти по этому поводу не смог

Автор: kwisp 6.11.2009, 14:30

gmurik2,
вот про это

Цитата
--ул. Гагарина

или вообще про Completer
не смог найти.. ?
Completer есть, даже примеры есть.
набери в ассистенте.

Автор: ViGOur 6.11.2009, 14:36

http://doc.crossplatform.ru/qt/4.5.0/tools-customcompleter.html ;)

Автор: gmurik2 6.11.2009, 15:01

Цитата
Custom Completer Example ;)


там не совсем то, что мне надо, мне надо чтобы выводились еще и те результаты где "га" встречается в середине слова

Автор: kwisp 6.11.2009, 16:02

мда..
просмотрел документацию.
пока не нашел решения.



Автор: ViGOur 6.11.2009, 16:12

Тогда глянь как в ассистенте реализован комплетер, у меня по крайней мере в ассистенте QtCreator'а (под ubuntu 9.10) комплетер работает так как тебе нужно.

Автор: gmurik2 9.11.2009, 8:20

Цитата(ViGOur @ 6.11.2009, 18:12) *
Тогда глянь как в ассистенте реализован комплетер, у меня по крайней мере в ассистенте QtCreator'а (под ubuntu 9.10) комплетер работает так как тебе нужно.


Если имеется ввиду примеры examples\tools\completer и examples\tools\customcompleter, то они работают не так как мне нужно, они предлагают варианты, которые начинаются на введенные символы. Мне же надо чтобы когда я ввожу например символы "ми", мне предлагались варианты "мир", "помидор" и т.д.

в доке также описываются варианты, которые реализованы в examples\tools\completer и examples\tools\customcompleter

Автор: Litkevich Yuriy 9.11.2009, 8:48

Цитата(gmurik2 @ 9.11.2009, 11:20) *
как в ассистенте реализован комплетер


Qt Assistant - справочная программа

Автор: frg10 9.11.2009, 16:05

Цитата(ViGOur @ 6.11.2009, 16:12) *
Тогда глянь как в ассистенте реализован комплетер, у меня по крайней мере в ассистенте QtCreator'а (под ubuntu 9.10) комплетер работает так как тебе нужно.

А там не используется стандартный комплетер. У них самописное там все.

gmurik2
С помощью QCompleter то что вам нужно не получится сделать. Он всегда использует введенную строчку как префикс к слову.

Автор: kwisp 9.11.2009, 16:49

Цитата(frg10 @ 9.11.2009, 16:05) *
У них самописное там все.

бери оно бесплатное:)
если есть вариант выдрать класс или группу классов выдирай смело.
а вообще минус в этом отношениии. тролли в своей же программе не пользуюь свой же комплиттер.
я почему то был уверен найти там(в доках по комплиттеру) QRegExp когда полез первый раз.. и удивился когда не нашел.


Автор: frg10 9.11.2009, 20:47

Цитата(kwisp @ 9.11.2009, 16:49) *
а вообще минус в этом отношениии. тролли в своей же программе не пользуюь свой же комплиттер.

А в чем минус? Если компонент не подходит для задачи, то для чего его использовать?

Вообще, из названия класса видно для чего он нужен: он дополняет. Т.е. вы печатаете начало, а он подбирает завершение. И со своей задачей он справляется отлично. А то что хочет от него топикстартер - это очень похоже, но не то.

Автор: haiflive 4.12.2010, 17:51

Вобщем вот нарыл такой код

    QLineEdit *lineEdit = new QLineEdit;
    // проблемы с разрывом всязи
    QSqlTableModel* model = new QSqlTableModel();
    model->setTable("abonents");
    model->select();

    QCompleter *completer = new QCompleter(model);
    completer->setCaseSensitivity(Qt::CaseInsensitive);
    completer->setCompletionColumn(7);// столбец по которому ищем
    completer->setMaxVisibleItems(10);

    connect(completer,SIGNAL(activated(QModelIndex)),this,SLOT(SelectAbonent(QModelIndex)));

    lineEdit->setCompleter(completer);

Это слот
void NaligationPanel::SelectAbonent(const QModelIndex &index)
{
    qDebug() << "Ttest ready!" << index.column() << ":" << index.data().toString();
    // получить значение других стобцов нужно здесь
}


Вопрос, Как получить из базы данных значение из другого столбца?

В данном примере происходи поиск по по 7 столбцу(ФИО), а как получить значения других стобцов, что-то не пойму, есть конечно вариант получить значение строки и номер полученной записи, потом выполнить дополнительный SQL.. но можно же как-то проще все данные уже загружены требуется их как-то извлечь, може указатель там какой есть в model, или как-то через QModelIndex можно получить ссылку на модель?
И хочу учесть тот факт, что "ФИО пользователей" могут быть одинаковыми.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)