Тёмный

Qt - Модель/представление часть 1 

Qt by Lev Alekseevskiy
Подписаться 6 тыс.
Просмотров 26 тыс.
50% 1

На примере создания пользовательской модели списка показаны особенности реализации архитектуры модель-представление в Qt.

Опубликовано:

 

6 апр 2013

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 24   
@dmitrygrayscale575
@dmitrygrayscale575 10 лет назад
Лев, огромное вам, человеческое! Записывайте еще!
@user-rn5hc8ih8l
@user-rn5hc8ih8l 5 лет назад
Самое путное видео на эту тему! Даже я наконец понял) Спасибо!
@kdm4821
@kdm4821 4 года назад
Чудо, а не человек, спасибо в общем ))
@uchungnguyen1474
@uchungnguyen1474 6 лет назад
mate i did not understand what are u saying but i got some code from you which is nice, spasiva
@scriptozavr
@scriptozavr 9 лет назад
Супер, всё предельно ясно. Спасибо.
@chipsoft1
@chipsoft1 10 лет назад
Спасибо за толковое видео
@victorkrasnov5576
@victorkrasnov5576 3 года назад
Толково, спасибо. Подпишусь. Заметил один недочёт - bool QListModel::setData() остался без return
@Fateslav
@Fateslav 10 лет назад
Спасибо большое! Очень познавательное видео
@azurchik593
@azurchik593 2 года назад
Хорошо, что ты есть.
@igorm6585
@igorm6585 5 лет назад
Я бы внес небольшую поправку в функцию setData(). В документации о ней написано: Returns true if successful; otherwise returns false (в этом же примере она ничего не возвращает, хотя это и никак не сказывается на работе). И еще один момент о setData(): The dataChanged() signal should be emitted if the data was successfully set. Т. е. надо сделать так: bool QListModel::setData(const QModelIndex &index, const QVariant &value, int role) { if( !index.isValid()) return false; if( role == Qt::EditRole) { list.replace(index.row(), value.toInt()); // The dataChanged() signal should be emitted if the data was successfully set emit(dataChanged(index, index)); return true; } return false; } В следующем уроке отсутствие emit() сказывается - после редактирования элемента он не перерисовывается автоматически с новым значением пока не выделишь другой элемент. P.S. А вообще уроки замечательные - огромное спасибо!
@evgeny6544
@evgeny6544 6 лет назад
Лев, а подскажите пожалуйста каким образом модель знает, что нужно работать именно с этим листом list , а если я создам ещё один лист lisr2, например с 4 элементами иинициализирую в конструкторе, то с каким листом будет работать модель?
@Levolex
@Levolex 6 лет назад
Вы наверное не совсем поняли, что переменная list не какая-то абстрактная, а вполне конкретная - а именно член класса, который я объявил в самом начале. Соответственно, к какой переменной вы будете обращаться во всех методах модели, те данные и будут отображаться. Но я действительно напрасно не проговорил вопрос о том, откуда как правило берутся данные в модели. То что в моем примере они инициализируются прямо внутри класса не очень типичная ситуация. Как правило данных берутся откуда-то извне (из БД, по сети, из файла и т.д.) И в этом случае обычно просто создается дополнительный метод, который загружает данные в модель. В моем примере это могло бы выглядеть как-то так: void loadData(QList dataList) { emit beginResetModel(); list = dataList; emit endResetModel(); } Испускание сигналов нужно для того, чтобы представление знало, что нужно перезапросить всю модель целиком.
@evgeny6544
@evgeny6544 6 лет назад
Т.е. если мы унаследовались от QAbstractListModel, то модель автоматически работает с членом класса? А как быть в таком случае, если например в private: секции будет 2 листа private: QList list; QListlist2; в конструкторе инициализируем оба листа QListModel::QListMpdel( QObject *parent) QAbstractListModel( parent ) { list
@evgeny6544
@evgeny6544 6 лет назад
Я попробовал реализовать, то что спросил. Приложение или падает или не меняет значение. Кажется я стал понимать что тут к чему. Лев, спасибо вам большое за хорошие видео!
@user-cz9db6no1y
@user-cz9db6no1y 7 лет назад
скажите а как добавлять или удалять строки?
@klotkarklots
@klotkarklots 7 лет назад
а откуда брать коды ???
@acerlmt
@acerlmt 6 лет назад
Блин, так сложно( Хочу написать небольшую программку для себя, но вот не знаю за сколько во всём разберусь. Уж думаю - может всё же было на электроне реализовать...
@DaniilK-hq5go
@DaniilK-hq5go 4 года назад
метод setData не возвращает значение и не проверяет индекс на валидность, также желательно отправлять сигнал dataChanged() там же, а пользовательский класс лучше не называть Q..., это сбивает с толку новичков
@SmileGobo
@SmileGobo 5 лет назад
setData должен возвращать значение, и хорошо бы объяснить на что это влияет. Ну и в целом реализация особенностей отображения в модели это писец. Я разачарован qt. Для нормальной работы придеться заводить нормальный слой абстракции для моделей, а это безобразие использовать как часть view. Урок очень толковый, спасибо.
@raphaelosipov867
@raphaelosipov867 9 лет назад
Спасибо Вы молодец! Только чавкать и цокать перестаньте, это же учебное пособие, а не репортаж!
@vitalijbazk5001
@vitalijbazk5001 9 лет назад
Сори но чвак чвак чвак на фоне - раздражает;
@vitalijbazk5001
@vitalijbazk5001 9 лет назад
Я может что-то не понимаю но по моему тут ты употреблял пищу одновременно. А так все супер.
@pavelgust6477
@pavelgust6477 9 лет назад
Чавканье бесит
@bookbrain9863
@bookbrain9863 5 месяцев назад
ничего не понятно + эти слюни весь ведоролик😂😂😂
Далее
Let's Recreate the Tesla UI in Qt and QML PART 1!
51:16
Custom Qt Widgets: Implementing a Toggle Switch
11:09
Просмотров 2,9 тыс.
Создаем базу данных в Qt
7:27
Просмотров 28 тыс.
QTableView Galore
13:16
Просмотров 6 тыс.