Название: логика создания модели и делегата Отправлено: ooki2day от Декабрь 27, 2014, 16:02 Здравствуйте. Начал разбираться с моделями и делегатами, и встал вопрос о правильности использования. Значит, есть данные и QWidget с QTextEdit, Qlabel, QPushButton. Я делаю так: берем данные, вводим их в нужное количество виджетов, список виджетов отдаю в QAbstractListModel; затем, исользую для этой модели делегат, который ловит нажатие на кнопку и генерит сигнал. Скажите, правильна ли такая логика? И как она влияет на скорость обработки всего этого (т.е. есть ли более быстрые варианты?)
Название: Re: логика создания модели и делегата Отправлено: Пантер от Декабрь 29, 2014, 09:06 Совершенно не так. Можель хранит только данные, а вот делегат создает виджеты для нужных данных. Посмотри примеры, которые поставляются с Кьютом.
Название: Re: логика создания модели и делегата Отправлено: ooki2day от Январь 05, 2015, 02:28 хоть убей, не могу понять одну вещь. есть модель, как делегатом создать нужное кол-во виджетов? и павильно ли я понимаю, что остальные элементы этих виджетов (кнопки, лайнэдиты) создаются в QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const?
Название: Re: логика создания модели и делегата Отправлено: PimenS от Январь 05, 2015, 04:05 Модель никакого отношения к QWidget не имеет. Модель работает с представлениями типа: QListView, QTableView, QTreeView.
А делегат нужен для того, чтобы удобнее было редактировать данные в представлении и записывать изменения в модель. А куда у тебя установлен делегат? Название: Re: логика создания модели и делегата Отправлено: ooki2day от Январь 05, 2015, 06:26 есть набор данных из БД. мне надо их отображать в виджете. грубый пример - стена вконакте: есть label отправителя, image, text, label date, comment. данные же берутся из БД в модель, создается делегат, в который добавляются данные из модели. правильно? так вот как создать делегат такой с лейблами и кнопками? точнее, я пытаюсь создать виджет для каждого итема модели, а в виджете создать мнопки и лейблы. вопрос в том, в каких наследованных методах от QStyledItemDelegate мне надо создавать виджет и все его наполнение?
Название: Re: логика создания модели и делегата Отправлено: PimenS от Январь 05, 2015, 09:01 есть набор данных из БД. мне надо их отображать в виджете. грубый пример - стена вконакте: есть label отправителя, image, text, label date, comment. данные же берутся из БД в модель, создается делегат, в который добавляются данные из модели. правильно? так вот как создать делегат такой с лейблами и кнопками? точнее, я пытаюсь создать виджет для каждого итема модели, а в виджете создать мнопки и лейблы. вопрос в том, в каких наследованных методах от QStyledItemDelegate мне надо создавать виджет и все его наполнение? Есть набор данных, которыми заполняется модель. Модель установлена в представление (например QTableView). А у представления, на определенные колонки установлены делегаты. Этот делегат позволяет определенным образом видеть и редактировать данные в этой колонке. создается делегат, в который добавляются данные из модели. правильно? Опиши свою задачу более подробно. Просто создается впечатление, что мы о разных понятиях говорим. Какая у тебя модель? Куда она установлена (какое представление используется для показа данных)? Как ты устанавливаешь делегат в представление? Название: Re: логика создания модели и делегата Отправлено: ooki2day от Январь 06, 2015, 01:45 я понимаю что из модели отображается все в представлении. вопрос в том, как создать делегат для представления в виде виджета со всякими лейблами и кнопочками. или виджет тут нафик не нужен, и просто рисовать нужные компоненты?
Название: Re: логика создания модели и делегата Отправлено: gil9red от Январь 06, 2015, 01:55 Переопределяете createEditor (http://qt-project.org/doc/qt-4.8/qitemdelegate.html#createEditor) и возвращаете указатель на виджет, который и будет содержать всякие лейблы и кнопки который вам нужно показать в представлении.
Примеры из коробки: http://qt-project.org/doc/qt-4.8/itemviews-spinboxdelegate.html http://qt-project.org/doc/qt-4.8/itemviews-stardelegate.html Название: Re: логика создания модели и делегата Отправлено: ooki2day от Январь 06, 2015, 02:26 gil9red, спасибо тебе огромное) теперь разобрался со всем.
Название: Re: логика создания модели и делегата Отправлено: gil9red от Январь 06, 2015, 02:43 gil9red, спасибо тебе огромное) теперь разобрался со всем. ;) Название: Re: логика создания модели и делегата Отправлено: ooki2day от Январь 06, 2015, 03:51 ну нет, не совсем все понятно. в примере со звездочками модель содержит виджет, а мне говорят что там должны быть только данные.
upd: все норм, по ходу спать надо)) не содержит она виджет Название: Re: логика создания модели и делегата Отправлено: ooki2day от Январь 06, 2015, 13:22 т.е. получается, что мне необходимо сперва в paint() рисоват свой виджет, а потом в createEditor() он создается поверх для редактирования? это норм?
Название: Re: логика создания модели и делегата Отправлено: kambala от Январь 06, 2015, 21:44 в paint() ты рисуешь то, с чем не нужно взаимодействие (ну можно и виджет отрисовать). а в createEditor() возвращаешь полноценный виджет, который будет получать события.
Название: Re: логика создания модели и делегата Отправлено: ooki2day от Январь 06, 2015, 23:43 т.е. это считается нормальным так делать? хорошо, тогда как будет более правильно? я попробовал через QWidget::grab(), но в этоге при создании эдитора не стыкуются правильно размеры. если через граб пойдет, то как бы грамотно обойти этот момент с размерами?
Название: Re: логика создания модели и делегата Отправлено: kambala от Январь 07, 2015, 00:02 пример отрисовки виджета из проекта:
Код
Название: Re: логика создания модели и делегата Отправлено: ooki2day от Январь 07, 2015, 00:52 спасибо большое)
Название: Re: логика создания модели и делегата Отправлено: ooki2day от Январь 07, 2015, 18:10 хм, а почему он при рендере неправильно рисует виджет по координатам x,y? т.е. если вместо 0,0 я укажу -13, -110 - рисуется нормально
Название: Re: логика создания модели и делегата Отправлено: ooki2day от Январь 07, 2015, 19:07 нашел варианты решения моей проблемы. если кому пригодится http://toster.ru/q/39263
Название: Re: логика создания модели и делегата Отправлено: kambala от Январь 07, 2015, 21:17 хм, а почему он при рендере неправильно рисует виджет по координатам x,y? т.е. если вместо 0,0 я укажу -13, -110 - рисуется нормально у меня правильно все... |