crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QComboBox + список совпадений
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
kwisp Дата 12.2.2009, 9:41
 
Цитата(vanvo @ 11.2.2009, 22:43) *
Нет, дело не в памяти. Я список внутри слота объявил только для форума. А в программе объявление list и result происходит в описании класса.


походу editTextChanged(QString) вызывается если addItems вызываешь и у тебя комбо редактируемый. от этого и падение. а может и когда clear() делаешь тоже editTextChanged(QString) вызывается.
Константин Дата 12.2.2009, 0:52
 
Цитата(Litkevich Yuriy @ 12.2.2009, 0:17) *
есть такой пример Iterating Through Completions.
Но я не вникал, годится оно или нет

не, это совсем не то.

в общем, пошуршал сырцами qcompleter.cpp - и вот такая картина:
QMatchData QSortedModelEngine::filter(const QString& part, const QModelIndex& parent, int)
{
    const QAbstractItemModel *model = c->proxy->sourceModel();
//...
        probeIndex = model->index(probe, c->column, parent);
        probeData = model->data(probeIndex, c->role).toString();
        const int cmp = QString::compare(probeData, part, c->cs);
//...

как видите, используется QString::compare. если бы использовался QRegExp, то можно было бы изъ??нуться, а так - только писать самому...
Litkevich Yuriy Дата 12.2.2009, 0:17
  есть такой пример Iterating Through Completions.
Но я не вникал, годится оно или нет
Константин Дата 12.2.2009, 0:07
  а по теме - у меня впечатление, что через QCompleter реализация подобной задачи не предусмотрена...и никак не соображу как же это обойти, не наследуясь от комбобокса - уж слишком не хватает виртуальных методов у QCompleter...
SABROG Дата 11.2.2009, 23:31
  А что дебаггер говорит?
Litkevich Yuriy Дата 11.2.2009, 23:31
 
Цитата(vanvo @ 12.2.2009, 1:43) *
Я список внутри слота объявил только для форума.
:lol:
продолжай в томже духе, помощь прийдет быстро.

Цитата(Константин @ 12.2.2009, 1:56) *
ай-ай-ай, Юрий
QStringList - это обёртка над QList<QString>, а QList, как известно, шаренный тип. т.о. проблема никак не в передаче по ссылке...
Хех, об этом я не подумал.

П.С. ко мне лучше на ты, мне так привычнее.
vanvo Дата 11.2.2009, 23:08
  Может конечно все это и не нужно... Т.е. нужен, по сути, тот же самый QCompleter, но чтобы вхождение введенной в QComboBox строки искал не только с первого символа элементов списка.
Константин Дата 11.2.2009, 22:56
 
Цитата(Litkevich Yuriy @ 11.2.2009, 22:00) *
А почему аварийно завершается могу сказать, смотри:
Цитата
void QComboBox::addItems ( const QStringList & texts )

в этой функции принимается ссылка на список, а список у тебя создан как обычная переменная, как только функция завершится, то и удалится эта переменная. Соответственно QComboBox будет обращатся к неправильной области памяти

ай-ай-ай, Юрий :)
QStringList - это обёртка над QList<QString>, а QList, как известно, шаренный тип. т.о. проблема никак не в передаче по ссылке...
vanvo Дата 11.2.2009, 22:43
 
Цитата(Litkevich Yuriy @ 11.2.2009, 22:00) *
Цитата(vanvo @ 12.2.2009, 0:53) *
При наборе букв, содержащихся в list, программа сразу же вылетает. Почему?
Если закоментить comboBox->clear();, то программа работает
почему при закоментированной отчистке продолжает работать я не знаю.
А почему аварийно завершается могу сказать, смотри:
Цитата
void QComboBox::addItems ( const QStringList & texts )

в этой функции принимается ссылка на список, а список у тебя создан как обычная переменная, как только функция завершится, то и удалится эта переменная. Соответственно QComboBox будет обращатся к неправильной области памяти

Нет, дело не в памяти. Я список внутри слота объявил только для форума. А в программе объявление list и result происходит в описании класса.
Litkevich Yuriy Дата 11.2.2009, 22:00
 
Цитата(vanvo @ 12.2.2009, 0:53) *
При наборе букв, содержащихся в list, программа сразу же вылетает. Почему?
Если закоментить comboBox->clear();, то программа работает
почему при закоментированной отчистке продолжает работать я не знаю.
А почему аварийно завершается могу сказать, смотри:
Цитата
void QComboBox::addItems ( const QStringList & texts )

в этой функции принимается ссылка на список, а список у тебя создан как обычная переменная, как только функция завершится, то и удалится эта переменная. Соответственно QComboBox будет обращатся к неправильной области памяти
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 16:52