Название: Собственная модель для QCompleter Отправлено: Red Devil от Июль 04, 2008, 23:53 Не получается создать свою модель для QCompleter.
Вот, например делаю такой класс : Код: class MyModel : public QAbstractListModel Устанавливаю свою модель для QCompleter - и ничего. Код: m_pStringList = new QStringList; Если разкометнировать модель для QStringListModel - то все нормально, StringModel устанавливается. А моя не работает, QCompleter ничего не выводит. В чем проблема ? Название: Re: Собственная модель для QCompleter Отправлено: Zmeishe от Июль 05, 2008, 08:05 Попробуй, всё-таки, Q_OBJECT в своём классе прописать.
Похоже от твоей модели ждут сигналов, а они не идут. Код: class MyModel : public QAbstractListModel Объяви их у себя тоже virtual. Название: Re: Собственная модель для QCompleter Отправлено: Red Devil от Июль 05, 2008, 11:35 Все сделал - не помогло ???
Код: class MyModel : public QAbstractListModel Название: Re: Собственная модель для QCompleter Отправлено: ритт от Июль 05, 2008, 11:39 А функции data, setData и rowCount - они все в базовом классе virtual объявлены. зачем?Объяви их у себя тоже virtual. Название: Re: Собственная модель для QCompleter Отправлено: Zmeishe от Июль 05, 2008, 11:51 Исключительно из уважения к тем, кто будет потом смотреть эти исходники.
Название: Re: Собственная модель для QCompleter Отправлено: Zmeishe от Июль 05, 2008, 11:57 Все сделал - не помогло ??? Единственное, что на ум приходит, попробуй в функции data выдавать данные ещё на Qt::EditRole Название: Re: Собственная модель для QCompleter Отправлено: ритт от Июль 05, 2008, 12:25 Код: QVariant QStringListModel::data(const QModelIndex &index, int role) const Название: Re: Собственная модель для QCompleter Отправлено: Red Devil от Июль 05, 2008, 13:17 Спасибо получилось, правда желаемого эффекта не достиг.
Я хотел чтобы m_pStringList находящийся в MyModel, мог изменятся где-то в другом месте. Например вот по тому же тесты, что был выше : Код: m_pStringList = new QStringList; Код: QStringList & List = *m_pStringList; И ничего - почему то все равно вижу только hello и world. Если раскометнировать m_pModel->SetList(m_pStringList) - ничего не изменится (проверял по отладчику код в функции Test выполняется). Мне просто нужно создать эффективную модель распределения памяти, чтобы эти строки никогда не копировались, а только указатели с нужными наборами данных в Model передовались - поэтому я вот так и изращаюсь. Здесь конечно пример сильно упрощен, здесь набора данных нет, просто один QStringList. Название: Re: Собственная модель для QCompleter Отправлено: Red Devil от Июль 05, 2008, 13:29 Получилось сделать так как хотел :
Код: QStringList & List = *m_pStringList; Правда я что-то не понимаю, если мы SetModel передаем указатель - почему этот обьект копируется ??? Ведь если бы он не копировался, то изменения должны были бы сразу в силу вступить. Или это зависит от внутренней реализации, например Completer узнает кол-во элементов в Model, только при ее установке SetModel, а не во время выполнения ? Как вы думаете ? Название: Re: Собственная модель для QCompleter Отправлено: ритт от Июль 05, 2008, 13:34 я, например, думаю, что стоит читать документацию. а если что-то остаётся непонятным после прочтения документации, всегда можно подглядеть соответствующие сырцы
читать инсертРовз Название: Re: Собственная модель для QCompleter Отправлено: Red Devil от Июль 05, 2008, 13:52 Я прочитал и не понял.
Скопировал реализацию из QStringListModel - эта функция вообще никогда не вызывается при работе. Название: Re: Собственная модель для QCompleter Отправлено: ритт от Июль 05, 2008, 15:20 QCompleterModel::setSourceModel:
Код: connect(source, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(rowsInserted())); думаю, если ты (правильно) переопределишь в своей модели insertRows и будешь добавлять значения через неё, комплитер будет адекватно реагировать |