Здравствуйте, гость ( Вход | Регистрация )
Litkevich Yuriy | Дата 14.8.2010, 18:02 |
Что-то я не понял как подключить модель к базе.. даQStringList stringList; нужно самому заполнять данными из БД?. 1) какую модель использовать? QSqlTableModel больше всего подойдёт.1) какую модель использовать? смотри описание2) как её заполнить? 4) как подключить к QListView 3) как её заполнить из базы(MySQL)? нет разницы из какой базы.при пустом поле вывести все записи, при введении буквы только записи начинающиеся с этой буквы. нужно использовать промежуточную модель (proxy)haiflive, тебе не мешало бы посмотреть все примеры и демонстрации Qt. твоя задача уже есть в виде примера |
|
haiflive | Дата 14.8.2010, 16:30 |
Что-то я не понял как подключить модель к базе.. QStringList stringList; нужно самому заполнять данными из БД?. Вобщем, нужно организовать поиск в базе по одному столбцу из таблицы (найти по фамилии) при пустом поле вывести все записи, при введении буквы только записи начинающиеся с этой буквы.. и тд.. колличество записей ~5000 Вопросы: 1) какую модель использовать? 2) как её заполнить? 4) как подключить к QListView 3) как её заполнить из базы(MySQL)? Спасибо за ответы. |
|
azure | Дата 29.4.2010, 13:54 |
Есть гденить рабочие примеры с наследованием моделей и с изменением данных? Дык, всё там же в документации по Модель/Представлении: Создание новых моделейI did it! Как только в data() я сделал вместо тупого return QVaraint(object->getName()) обертку для обработки role, как показано в документации, - заработало. |
|
Litkevich Yuriy | Дата 27.4.2010, 18:34 |
Есть гденить рабочие примеры с наследованием моделей и с изменением данных? Дык, всё там же в документации по Модель/Представлении: Создание новых моделей |
|
azure | Дата 27.4.2010, 14:45 |
что значит ниже лежащие? Есть класс PlotCurve, каждый из которых содержит QString name. Объекты создаются при помощи new, указатели помещаются в QList<PlotCurve*>. Сделал модель (subclass от QAbstractListModel) - PlotCurveModel.
Вызываются обе эти функции, с помощью qDebug я удостоверился что возвращаемый QVariant содержит строку с именем нужной PlotCurve. Вот когда данные в модели изменились, она посылает сигнал dataChanged() Пробовал, вид не обновлялся почему-то. Видимо, у меня есть какаято бяка в коде. Есть гденить рабочие примеры с наследованием моделей и с изменением данных? |
|
Litkevich Yuriy | Дата 27.4.2010, 11:53 |
что нижележащие данные изменились? что значит ниже лежащие?Вот когда данные в модели изменились, она посылает сигнал dataChanged() Модель, как я понял, должна быть оповещена об изменении данных при помощь setData(), не правильно понял, для представления модель и является источником данных, а где она их берёт представлению безразлично. Метод setData() не оповещает модель, а устанавливает данные в ней (что следует из названия метода)Вы там что-то говорили про "раздельчик маленький про изменение размеров модели". Покажите, где это, что-то не могу найти. Заранее спасибо. читай всё и не пропустишь соответствующий раздельчик. |
|
azure | Дата 27.4.2010, 7:42 |
при этом соответствующая модель не обновляет QListView соответствующая, это какая?Которую я сделал. Сделал subclass от QAbstractListModel, реализовал data() и rowCount. Проверил, data() возвращает непустой QVariant, rowCount() возвращает число строк. И не важно, подключаю я модель к виду пока данных нет, или когда данные появляются - вид остается пустой. Вызовы model->rowCount() и model->data() происходят, значит, вид их вызывает. Возвращаются корректные значения. Не совсем понимаю как и в каком виде передается информация об изменении структуры данных к модели и как от модели к виду. методами Model::data и Model::setDataПредставление, для каждого элемента данных создаёт делегат (QStyledItemDelegat), если ты сам явно его не установил. Когда элемент данных (читай делегат) находится в видимой области, он запрашивает данные у модели с помощью Model::data. Когда элемент данных (читай делегат) переходит в режим редактирования, то делегат создаёт виджет-редактор, который получает данные точно также, только роль данных другая. А при закрытии виджета редактора, последний отправляет данные в модель с помощью Model::setData Вот это я вроде как понимаю. А как вид узнает от модели, что нижележащие данные изменились? Модель, как я понял, должна быть оповещена об изменении данных при помощь setData(), но я не совсем понимаю, как её реализовать. Вы там что-то говорили про "раздельчик маленький про изменение размеров модели". Покажите, где это, что-то не могу найти. Заранее спасибо. |
|
Litkevich Yuriy | Дата 27.4.2010, 1:38 |
при этом соответствующая модель не обновляет QListView соответствующая, это какая?Не совсем понимаю как и в каком виде передается информация об изменении структуры данных к модели и как от модели к виду. методами Model::data и Model::setDataПредставление, для каждого элемента данных создаёт делегат (QStyledItemDelegat), если ты сам явно его не установил. Когда элемент данных (читай делегат) находится в видимой области, он запрашивает данные у модели с помощью Model::data. Когда элемент данных (читай делегат) переходит в режим редактирования, то делегат создаёт виджет-редактор, который получает данные точно также, только роль данных другая. А при закрытии виджета редактора, последний отправляет данные в модель с помощью Model::setData |
|
azure | Дата 26.4.2010, 23:21 |
Потому что не дочитал про модели. угу, раздельчик маленький про изменение размеров моделиА можно поподробнее? Как раз сейчас встала задача такая.. В существующий QList <myclass*> добавляются элементы, при этом соответствующая модель не обновляет QListView. Не совсем понимаю как и в каком виде передается информация об изменении структуры данных к модели и как от модели к виду. |
|
Litkevich Yuriy | Дата 28.2.2010, 15:18 |
Потому что не дочитал про модели. угу, раздельчик маленький про изменение размеров модели |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 7:50 |