Глава 12 – Интервью, или модель-представление

Интервью, или модель-представление

Приобрести книгу можно на сайте ozon.ru и в электронном виде на Google Play:
Приобрести книгу о Qt и C++ на Ozon.ru Купить книгу о Qt и C++ на Goole Play

11 thoughts on “Глава 12 – Интервью, или модель-представление

  1. Здравствуйте, Макс!
    Стр. 195, раздел “Делегат”. В начале раздела написано, что “В Qt есть готовый класс делегата QStyledItemDelegate (рис. 12.7)…”, но на рисунке изображен класс QItemDelegate. Как я понял из справки Qt класс QStyledItemDelegate предпочтительнее, т.к. выполняет задачу “отрисовывания элементов представления”.

    1. Да, на рисунке 12.7 действительно отсутствует класс QStyledItemDelegate. Согласен с Вами, что он тоже должен там быть! Спасибо!

  2. Стр. 203 Листинг 12.6:
    lst << "Linux" << "Windows" << "MacOS" << "OS2";
    Небольшая опечатка, вместо "OS2" должно быть "Android".

  3. Макс, на страницах 203 – 209 Вы создаете собственную модель данных IntListModel унаследованную от QAbstractListModel. Изменения значений в представлениях QListView и QTableView, которые отображают данные представляемые этой моделью, можно делать с помощью ввода с клавиатуры или увеличивая/уменьшая стрелками (вверх и вниз). Это встроенный элемент счетчика? Он по умолчанию включен в эту модель (QAbstractListModel)?
    И еще один вопрос, как реализовать закрытие обоих окон при закрытии только одного? В классах QListView и QTableView нет сигнала closeЧто_То_Там(), это можно сделать только при использовании родительских виджетов для этих классов (чтобы действовать через них)?

    1. Здравствуйте, Вячеслав! В модель никакие элементы не включаются, за механизм редактирования отвечает делегат. Вы можете перезаписать в собственном делегате метод editorEvent() для того, чтобы внести в этот процесс какие либо изменения. На рисунке 12.1 показано как компоненты “интервью” взаимодействуют друг с другом.
      По поводу закрытия окон. QTabelView и QListView являются виджетами, а следовательно имеют метод события закрытия closeEvent(). Вы можете унаследовать эти классы и выслать из их объектов сигнал, который будет уведомлять о закрытии окна. Если вы не хотите наследовать эти классы, то можете просто реализовать класс фильтра (см.гл.15) для события QCloseEvent и установить его в виджетах QTabelView и QListView.

      1. Спасибо за разъяснения, Макс! С делегатом как-то сложновато, не до конца понял этот механизм, ну, думаю, в будущем еще вернусь к этому вопросу… А в понятиях модели и представления, вроде, разобрался, очень понравился такой подход, особенно понравился механизм промежуточной модели данных (Proxy model), думаю, на практике может очень пригодиться.

        1. Да, Модель/Представление это одна из самых сложных тем в Qt. Но овладение этой темой крайне желательно!

  4. Здравствуйте , у меня возникают проблемы с компиляцией “Табличной модели” представленной в листинге 12.17 , TableModel принимается за абстрактный класс , не было ли у кого-нибудь схожих проблем ?

Добавить комментарий