crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 15.8.2022, 15:07