![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
ЙаМайскЫйПчОЛ |
![]()
Сообщение
#1
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 154 Регистрация: 10.7.2008 Из: СПб Пользователь №: 232 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
Собратья по Qt, будте милостивы, подскажите как прикрутить к QComboBox'у список совпадений внизу.
т.е. возможноли это реализовать без извращений? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
%QTDIR%\examples\tools\completer
|
|
|
ЙаМайскЫйПчОЛ |
![]()
Сообщение
#3
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 154 Регистрация: 10.7.2008 Из: СПб Пользователь №: 232 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
Уже все крутится)
Туплю)))). Сообщение отредактировал ЙаМайскЫйПчОЛ - 30.10.2008, 19:08 |
|
|
AD |
![]()
Сообщение
#4
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(ЙаМайскЫйПчОЛ) Собратья по Qt, будте милостивы, подскажите как прикрутить к QComboBox'у список совпадений внизу. т.е. возможноли это реализовать без извращений? А что это такое - список совпадений? Интересно даже стало! Подскажите, пожалуйста. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#5
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#6
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Посмотрел на пример. Прочитал твой пост, Юрий. И нифига не понял. Что за автозавершение?
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
в програмерских редакторах, его еще автодополнение называют.
AD, ты не дремлешь? ![]() я-то уже торможу, но по моим часам мне пора, а тебе вроде рано ![]() |
|
|
AD |
![]()
Сообщение
#8
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(Litkevich Yuriy @ 30.10.2008, 19:23) в програмерских редакторах, его еще автодополнение называют. AD, ты не дремлешь? ![]() я-то уже торможу, но по моим часам мне пора, а тебе вроде рано ![]() В Питере уже 19-40! А работать сегодня начал в 9-30 утра. Естественно притормаживаю, да и домой уже пора! ![]() Я до сих пор не понял, что за автозавершение-дополнение? В смысле пишешь первые символы, а он дополняет? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
ЙаМайскЫйПчОЛ |
![]()
Сообщение
#10
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 154 Регистрация: 10.7.2008 Из: СПб Пользователь №: 232 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
Докладываю.
класс автодополнения в Qt, называется QCompleter по умолчанию используется в QComboBox и QLineEdit. Чтобы заюзать автоподстановщик (по умолчанию в QСomboBox он и так работает, только ModelSorting и CompletionMode надо задать какие хотим): completer = comboBox->completer(); //нагло пользуемся тем, что нам дают указатель, но completer конечно же надо объявлять ![]() completer->setModelSorting("ModelSorting вставить своё"); completer->setCompletionMode("CompletionMode"); // в моем случае CompletionMode = QCompleter::UnfilteredPopupCompletion |
|
|
vanvo |
![]()
Сообщение
#11
|
Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 18.8.2008 Пользователь №: 267 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
ЙаМайскЫйПчОЛ, спасибо за предыдущий пост.
А как сделать, чтобы сравнение введенной строки в QComboBox с его содержимым происходило не с 1-го символа, а с каждого. Поясню на примере: при вводе "чик", в QComboBox оставались не только "чик", "чик-чирик", а еще и "мальчик", "танчики". |
|
|
Litkevich Yuriy |
![]()
Сообщение
#12
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
vanvo, тут ключем будет не виджет (QComboBox), а настройки QCompleter.
Посмотри QCompleter::UnfilteredPopupCompletion возможно подойдет, ну и вообще доку по QCompleter почитай. |
|
|
vanvo |
![]()
Сообщение
#13
|
Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 18.8.2008 Пользователь №: 267 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
vanvo, тут ключем будет не виджет (QComboBox), а настройки QCompleter. Посмотри QCompleter::UnfilteredPopupCompletion возможно подойдет, ну и вообще доку по QCompleter почитай. Ну QCompleter::UnfilteredPopupCompletion ничего хорошего не делает... лишь проматывает список до первого совпадения Доку по QCompleter я смотрел, что-то тоже ничего хорошего там не нашел ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#14
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
vanvo |
![]()
Сообщение
#15
|
Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 18.8.2008 Пользователь №: 267 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Мутить что-то типа: comboBoxService->clear(); listService = listService.filter(key); comboBoxService->addItems(listService); key - введенная строка в comboBoxService Еще вопросец: как отследить изменение текста в QComboBox, если мы еще не нажали Enter? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#16
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#17
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
vanvo, я именно по указанному вопросу предлагал сделать новую тему (я ее переименовал)
|
|
|
vanvo |
![]()
Сообщение
#18
|
Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 18.8.2008 Пользователь №: 267 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Сделал вот такую штуку
При наборе букв, содержащихся в list, программа сразу же вылетает. Почему? Если закоментить comboBox->clear();, то программа работает |
|
|
Litkevich Yuriy |
![]()
Сообщение
#19
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
При наборе букв, содержащихся в list, программа сразу же вылетает. Почему? почему при закоментированной отчистке продолжает работать я не знаю.Если закоментить comboBox->clear();, то программа работает А почему аварийно завершается могу сказать, смотри: Цитата void QComboBox::addItems ( const QStringList & texts ) в этой функции принимается ссылка на список, а список у тебя создан как обычная переменная, как только функция завершится, то и удалится эта переменная. Соответственно QComboBox будет обращатся к неправильной области памяти |
|
|
vanvo |
![]()
Сообщение
#20
|
Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 18.8.2008 Пользователь №: 267 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
При наборе букв, содержащихся в list, программа сразу же вылетает. Почему? почему при закоментированной отчистке продолжает работать я не знаю.Если закоментить comboBox->clear();, то программа работает А почему аварийно завершается могу сказать, смотри: Цитата void QComboBox::addItems ( const QStringList & texts ) в этой функции принимается ссылка на список, а список у тебя создан как обычная переменная, как только функция завершится, то и удалится эта переменная. Соответственно QComboBox будет обращатся к неправильной области памяти Нет, дело не в памяти. Я список внутри слота объявил только для форума. А в программе объявление list и result происходит в описании класса. |
|
|
Константин |
![]()
Сообщение
#21
|
![]() Студент ![]() Группа: Участник Сообщений: 69 Регистрация: 9.2.2009 Пользователь №: 539 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
А почему аварийно завершается могу сказать, смотри: Цитата void QComboBox::addItems ( const QStringList & texts ) в этой функции принимается ссылка на список, а список у тебя создан как обычная переменная, как только функция завершится, то и удалится эта переменная. Соответственно QComboBox будет обращатся к неправильной области памяти ай-ай-ай, Юрий ![]() QStringList - это обёртка над QList<QString>, а QList, как известно, шаренный тип. т.о. проблема никак не в передаче по ссылке... |
|
|
vanvo |
![]()
Сообщение
#22
|
Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 18.8.2008 Пользователь №: 267 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Может конечно все это и не нужно... Т.е. нужен, по сути, тот же самый QCompleter, но чтобы вхождение введенной в QComboBox строки искал не только с первого символа элементов списка.
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#23
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Я список внутри слота объявил только для форума. ![]() продолжай в томже духе, помощь прийдет быстро. ай-ай-ай, Юрий Хех, об этом я не подумал.QStringList - это обёртка над QList<QString>, а QList, как известно, шаренный тип. т.о. проблема никак не в передаче по ссылке... П.С. ко мне лучше на ты, мне так привычнее. |
|
|
SABROG |
![]()
Сообщение
#24
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
А что дебаггер говорит?
|
|
|
Константин |
![]()
Сообщение
#25
|
![]() Студент ![]() Группа: Участник Сообщений: 69 Регистрация: 9.2.2009 Пользователь №: 539 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
а по теме - у меня впечатление, что через QCompleter реализация подобной задачи не предусмотрена...и никак не соображу как же это обойти, не наследуясь от комбобокса - уж слишком не хватает виртуальных методов у QCompleter...
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#26
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
есть такой пример Iterating Through Completions.
Но я не вникал, годится оно или нет |
|
|
Константин |
![]()
Сообщение
#27
|
![]() Студент ![]() Группа: Участник Сообщений: 69 Регистрация: 9.2.2009 Пользователь №: 539 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
есть такой пример Iterating Through Completions. Но я не вникал, годится оно или нет не, это совсем не то. в общем, пошуршал сырцами qcompleter.cpp - и вот такая картина:
как видите, используется QString::compare. если бы использовался QRegExp, то можно было бы изъ??нуться, а так - только писать самому... |
|
|
kwisp |
![]()
Сообщение
#28
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Нет, дело не в памяти. Я список внутри слота объявил только для форума. А в программе объявление list и result происходит в описании класса. походу editTextChanged(QString) вызывается если addItems вызываешь и у тебя комбо редактируемый. от этого и падение. а может и когда clear() делаешь тоже editTextChanged(QString) вызывается. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 13.6.2025, 15:20 |