| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QСomboBox и QCompleter |
| Автор: dix75 4.5.2012, 00:52 | ||
| Добрый день! Есть код.
Но ComboBox ничего не отображает, куда копать? Причем если заменить QComboBox на QLineEdit все нормально работает. |
| Автор: dmitrio 4.5.2012, 09:58 |
| я в stringlist через append добавлял, все нормально отображает P.S Хм, проверил у себя, все ок P.SS Да, кстати, у меня он тоже ничего не отображает, отобразит только в том случае, если ввести первую букву, совпадающую с первыми буквами из QStringList тогда он отобразит эти значения |
| Автор: math64 4.5.2012, 10:45 |
| setEditable(true); нужно переставить перед setCompleter(completer). У нередактируемого комбо-бокса комплитеров нет. |
| Автор: _GRIN_ 4.5.2012, 16:00 | ||
| Вообщем я попробывал в коде своего ItemDelegate (который QComboBox создаёт в createEditor() ) - со стринглистом и комплитором ничего не вышло, поп-ап не отображает все варианты - максимиму - срабатывает AutoCompletion - когда введённый текст с одним из вариантов совпадает. Причём в делегате, который QLineEdit создаёт - всё ок - QStringList (член самого делегата) отрабатывает на ура. Твой код у мена нормально заработал через модель.
Возможно то что QComboBox через QStringList не работает - баг троллей - но копать лень. |
| Автор: math64 4.5.2012, 16:21 |
| Возможно, нужно после setEditable(true); нужно получить сам редактор с помощью lineEdit() и назначить комплетер непосредственно ему. |
| Автор: _GRIN_ 4.5.2012, 22:28 | ||||||
| Вообщем суть в следующем (исходники 4.7.4): 1. QComboBox::completer() возвращает completer() своего lineEdit - который создаётся/уничтожается при вызове QComboBox::setEditable(bool).
2. Поп-ап окошко содержит в себе данные модели комбобокса, а не модели комплитера.
Вот поэтому комплитер работал, а попап не отображался, а при работе через модель всё ок. Причем при создании lineEdit-а (через setEditable(true) ) комплитер правильно привязывается к модели комбобокса. Поэтому через модель пофиг когда и сколько раз ты setEdiable вызовешь. P.S. Ещё раз убеждаюсь в том, что даже малелочи надо делать тщательно - через model + view =) Добавлено через 3 минуты и 15 секунд не очень дружелюбно к пользователям, которые любят мышку и не любят стучать по клаве - кликнул кнопку а там фига - спрашивает - нафига комбобокс, когда можно просто QLineEdit с комплитером засунуть и не путать пользователей? |
| Автор: dix75 4.5.2012, 22:44 | ||||
Да у меня тоже, спасибо. Добавлено через 2 минуты и 5 секунд
Вот вот. |