crossplatform.ru

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


  Ответ в MVC. Своя модель и ListView
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 14.8.2010, 18:02
 
Цитата(haiflive @ 14.8.2010, 20:30) *
Что-то я не понял как подключить модель к базе..
QStringList stringList; нужно самому заполнять данными из БД?.
да

Цитата(haiflive @ 14.8.2010, 20:30) *
1) какую модель использовать?
QSqlTableModel больше всего подойдёт.

Цитата(haiflive @ 14.8.2010, 20:30) *
1) какую модель использовать?
2) как её заполнить?
4) как подключить к QListView
смотри описание

Цитата(haiflive @ 14.8.2010, 20:30) *
3) как её заполнить из базы(MySQL)?
нет разницы из какой базы.

Цитата(haiflive @ 14.8.2010, 20:30) *
при пустом поле вывести все записи, при введении буквы только записи начинающиеся с этой буквы.
нужно использовать промежуточную модель (proxy)


haiflive, тебе не мешало бы посмотреть все примеры и демонстрации Qt. твоя задача уже есть в виде примера
haiflive Дата 14.8.2010, 16:30
  Что-то я не понял как подключить модель к базе..
QStringList stringList; нужно самому заполнять данными из БД?.

Вобщем, нужно организовать поиск в базе по одному столбцу из таблицы (найти по фамилии)
при пустом поле вывести все записи, при введении буквы только записи начинающиеся с этой буквы.. и тд..
колличество записей ~5000

Вопросы:
1) какую модель использовать?
2) как её заполнить?
4) как подключить к QListView
3) как её заполнить из базы(MySQL)?

Спасибо за ответы.
azure Дата 29.4.2010, 13:54
 
Цитата(Litkevich Yuriy @ 27.4.2010, 18:34) *
Цитата(azure @ 27.4.2010, 18:45) *
Есть гденить рабочие примеры с наследованием моделей и с изменением данных?
Дык, всё там же в документации по Модель/Представлении: Создание новых моделей


I did it!
Как только в data() я сделал вместо тупого return QVaraint(object->getName()) обертку для обработки role, как показано в документации, - заработало.
Litkevich Yuriy Дата 27.4.2010, 18:34
 
Цитата(azure @ 27.4.2010, 18:45) *
Есть гденить рабочие примеры с наследованием моделей и с изменением данных?
Дык, всё там же в документации по Модель/Представлении: Создание новых моделей
azure Дата 27.4.2010, 14:45
 
Цитата(Litkevich Yuriy @ 27.4.2010, 11:53) *
что значит ниже лежащие?

Есть класс PlotCurve, каждый из которых содержит QString name. Объекты создаются при помощи new, указатели помещаются в QList<PlotCurve*>.
Сделал модель (subclass от QAbstractListModel) - PlotCurveModel.

QVariant PlotCurveModel::data(const QModelIndex &index, int role) const {
    QVariant val;
    //curveList is QList<PlotCurve*>
    val.setValue(curveList->at(index.row())->getName());
    qDebug()<<"PlotCurve name at index"<<index.row()<<"is"<<val.toString();
    return val;
}

int PlotCurveListModel::rowCount(const QModelIndex &parent) const {
    return curveList->count();
}


Вызываются обе эти функции, с помощью qDebug я удостоверился что возвращаемый QVariant содержит строку с именем нужной PlotCurve.

Цитата(Litkevich Yuriy @ 27.4.2010, 11:53) *
Вот когда данные в модели изменились, она посылает сигнал dataChanged()

Пробовал, вид не обновлялся почему-то. Видимо, у меня есть какаято бяка в коде. Есть гденить рабочие примеры с наследованием моделей и с изменением данных?
Litkevich Yuriy Дата 27.4.2010, 11:53
 
Цитата(azure @ 27.4.2010, 11:42) *
что нижележащие данные изменились?
что значит ниже лежащие?

Вот когда данные в модели изменились, она посылает сигнал dataChanged()
Цитата(azure @ 27.4.2010, 11:42) *
Модель, как я понял, должна быть оповещена об изменении данных при помощь setData(),
не правильно понял, для представления модель и является источником данных, а где она их берёт представлению безразлично. Метод setData() не оповещает модель, а устанавливает данные в ней (что следует из названия метода)

Цитата(azure @ 27.4.2010, 11:42) *
Вы там что-то говорили про "раздельчик маленький про изменение размеров модели". Покажите, где это, что-то не могу найти. Заранее спасибо.
читай всё и не пропустишь соответствующий раздельчик.
azure Дата 27.4.2010, 7:42
 
Цитата(Litkevich Yuriy @ 27.4.2010, 1:38) *
Цитата(azure @ 27.4.2010, 3:21) *
при этом соответствующая модель не обновляет QListView
соответствующая, это какая?


Которую я сделал. Сделал subclass от QAbstractListModel, реализовал data() и rowCount. Проверил, data() возвращает непустой QVariant, rowCount() возвращает число строк. И не важно, подключаю я модель к виду пока данных нет, или когда данные появляются - вид остается пустой. Вызовы model->rowCount() и model->data() происходят, значит, вид их вызывает. Возвращаются корректные значения.

Цитата(Litkevich Yuriy @ 27.4.2010, 1:38) *
Цитата(azure @ 27.4.2010, 3:21) *
Не совсем понимаю как и в каком виде передается информация об изменении структуры данных к модели и как от модели к виду.
методами Model::data и Model::setData
Представление, для каждого элемента данных создаёт делегат (QStyledItemDelegat), если ты сам явно его не установил.
Когда элемент данных (читай делегат) находится в видимой области, он запрашивает данные у модели с помощью Model::data.
Когда элемент данных (читай делегат) переходит в режим редактирования, то делегат создаёт виджет-редактор, который получает данные точно также, только роль данных другая. А при закрытии виджета редактора, последний отправляет данные в модель с помощью Model::setData

Вот это я вроде как понимаю. А как вид узнает от модели, что нижележащие данные изменились? Модель, как я понял, должна быть оповещена об изменении данных при помощь setData(), но я не совсем понимаю, как её реализовать. Вы там что-то говорили про "раздельчик маленький про изменение размеров модели". Покажите, где это, что-то не могу найти. Заранее спасибо.
Litkevich Yuriy Дата 27.4.2010, 1:38
 
Цитата(azure @ 27.4.2010, 3:21) *
при этом соответствующая модель не обновляет QListView
соответствующая, это какая?

Цитата(azure @ 27.4.2010, 3:21) *
Не совсем понимаю как и в каком виде передается информация об изменении структуры данных к модели и как от модели к виду.
методами Model::data и Model::setData
Представление, для каждого элемента данных создаёт делегат (QStyledItemDelegat), если ты сам явно его не установил.
Когда элемент данных (читай делегат) находится в видимой области, он запрашивает данные у модели с помощью Model::data.
Когда элемент данных (читай делегат) переходит в режим редактирования, то делегат создаёт виджет-редактор, который получает данные точно также, только роль данных другая. А при закрытии виджета редактора, последний отправляет данные в модель с помощью Model::setData
azure Дата 26.4.2010, 23:21
 
Цитата(Litkevich Yuriy @ 28.2.2010, 15:18) *
Цитата(BRE @ 28.2.2010, 17:40) *
Потому что не дочитал про модели.
угу, раздельчик маленький про изменение размеров модели


А можно поподробнее? Как раз сейчас встала задача такая..
В существующий QList <myclass*> добавляются элементы, при этом соответствующая модель не обновляет QListView. Не совсем понимаю как и в каком виде передается информация об изменении структуры данных к модели и как от модели к виду.
Litkevich Yuriy Дата 28.2.2010, 15:18
 
Цитата(BRE @ 28.2.2010, 17:40) *
Потому что не дочитал про модели.
угу, раздельчик маленький про изменение размеров модели
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 8:46