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

แชร์
ฝัง
  • เผยแพร่เมื่อ 6 เม.ย. 2013
  • На примере создания пользовательской модели списка показаны особенности реализации архитектуры модель-представление в Qt.

ความคิดเห็น • 24

  • @dmitrygrayscale575
    @dmitrygrayscale575 10 ปีที่แล้ว +10

    Лев, огромное вам, человеческое! Записывайте еще!

  • @user-rn5hc8ih8l
    @user-rn5hc8ih8l 5 ปีที่แล้ว +1

    Самое путное видео на эту тему! Даже я наконец понял) Спасибо!

  • @kdm4821
    @kdm4821 4 ปีที่แล้ว +1

    Чудо, а не человек, спасибо в общем ))

  • @scriptozavr
    @scriptozavr 9 ปีที่แล้ว +3

    Супер, всё предельно ясно. Спасибо.

  • @chipsoft1
    @chipsoft1 10 ปีที่แล้ว +5

    Спасибо за толковое видео

  • @Fateslav
    @Fateslav 10 ปีที่แล้ว +1

    Спасибо большое! Очень познавательное видео

  • @uchungnguyen1474
    @uchungnguyen1474 6 ปีที่แล้ว +6

    mate i did not understand what are u saying but i got some code from you which is nice, spasiva

  • @victorkrasnov5576
    @victorkrasnov5576 3 ปีที่แล้ว +1

    Толково, спасибо. Подпишусь.
    Заметил один недочёт - bool QListModel::setData() остался без return

  • @azurchik593
    @azurchik593 2 ปีที่แล้ว

    Хорошо, что ты есть.

  • @igorm6585
    @igorm6585 5 ปีที่แล้ว +1

    Я бы внес небольшую поправку в функцию 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 ปีที่แล้ว +1

    Лев, а подскажите пожалуйста каким образом модель знает, что нужно работать именно с этим листом list , а если я создам ещё один лист lisr2, например с 4 элементами иинициализирую в конструкторе, то с каким листом будет работать модель?

    • @Levolex
      @Levolex  6 ปีที่แล้ว +2

      Вы наверное не совсем поняли, что переменная 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 ปีที่แล้ว +1

    скажите а как добавлять или удалять строки?

  • @klotkarklots
    @klotkarklots 7 ปีที่แล้ว +1

    а откуда брать коды ???

  • @acerlmt
    @acerlmt 6 ปีที่แล้ว

    Блин, так сложно( Хочу написать небольшую программку для себя, но вот не знаю за сколько во всём разберусь. Уж думаю - может всё же было на электроне реализовать...

  • @DaniilK-hq5go
    @DaniilK-hq5go 4 ปีที่แล้ว

    метод setData не возвращает значение и не проверяет индекс на валидность, также желательно отправлять сигнал dataChanged() там же, а пользовательский класс лучше не называть Q..., это сбивает с толку новичков

  • @SmileGobo
    @SmileGobo 5 ปีที่แล้ว

    setData должен возвращать значение, и хорошо бы объяснить на что это влияет. Ну и в целом реализация особенностей отображения в модели это писец. Я разачарован qt. Для нормальной работы придеться заводить нормальный слой абстракции для моделей, а это безобразие использовать как часть view. Урок очень толковый, спасибо.

  • @raphaelosipov867
    @raphaelosipov867 9 ปีที่แล้ว +2

    Спасибо Вы молодец! Только чавкать и цокать перестаньте, это же учебное пособие, а не репортаж!

  • @vitalijbazk5001
    @vitalijbazk5001 9 ปีที่แล้ว +4

    Сори но чвак чвак чвак на фоне - раздражает;

    • @vitalijbazk5001
      @vitalijbazk5001 9 ปีที่แล้ว +1

      Я может что-то не понимаю но по моему тут ты употреблял пищу одновременно. А так все супер.

  • @pavelgust6477
    @pavelgust6477 8 ปีที่แล้ว +11

    Чавканье бесит

  • @bookbrain9863
    @bookbrain9863 5 หลายเดือนก่อน

    ничего не понятно + эти слюни весь ведоролик😂😂😂