Название: QItemDelegate обновления данных
Отправлено: CJ1 от Октябрь 22, 2012, 18:15
Вот содал я QItemDelegate QCombobox Работает. Но как изменить данные Combobox? C++ (Qt) ComboboxDelegate::ComboboxDelegate(QStringList & stringList, QObject *parent) : QItemDelegate(parent) { this->stringList = stringList; } QWidget *ComboboxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem & /*option */, const QModelIndex &/* index */) const { QComboBox *editor = new QComboBox(parent); this->combobox = editor; editor->addItems(this->stringList); return editor; } void ComboboxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QString value = index.model()->data(index, Qt::EditRole).toString(); QComboBox *Combobox = static_cast<QComboBox*>(editor); int res = Combobox->findText(value); if (res == -1) res = 0; Combobox->setCurrentIndex(res ); } void ComboboxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QComboBox *Combobox = static_cast<QComboBox*>(editor); model->setData(index, Combobox->currentText(), Qt::EditRole); } void ComboboxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const { editor->setGeometry(option.rect); }
Название: Re: QItemDelegate обновления данных
Отправлено: CJ1 от Октябрь 22, 2012, 18:26
Только конченный дебил мог придумать поставить тут const
Название: Re: QItemDelegate обновления данных
Отправлено: mutineer от Октябрь 22, 2012, 18:28
где тут?
Название: Re: QItemDelegate обновления данных
Отправлено: CJ1 от Октябрь 22, 2012, 18:30
void ComboboxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
Название: Re: QItemDelegate обновления данных
Отправлено: mutineer от Октябрь 22, 2012, 18:31
Что не так с конст в этом месте?
Название: Re: QItemDelegate обновления данных
Отправлено: CJ1 от Октябрь 22, 2012, 18:44
Не дает чтото изменить C++ (Qt) class ComboboxDelegate : public QItemDelegate { Q_OBJECT public: ComboboxDelegate(QStringList &stringList, QObject *parent = 0); QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; void setEditorData(QWidget *editor, const QModelIndex &index) const; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const; void reset(QStringList &stringList); private: bool reset_data; QStringList stringList; };
Видешь тут reset_data так вот пишу C++ (Qt) void ComboboxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QString value = index.model()->data(index, Qt::EditRole).toString(); QComboBox *Combobox = static_cast<QComboBox*>(editor); int res = Combobox->findText(value); if (res == -1) res = 0; Combobox->setCurrentIndex(res ); if (reset_data) { Combobox->clear(); Combobox->addItems(stringList); reset_data = false; // Вот тут } }
Все не компилится так как из за const нельзя менять данные!
Название: Re: QItemDelegate обновления данных
Отправлено: kambala от Октябрь 22, 2012, 18:48
если позарез нужно изменять переменную внутри конст метода, то используй mutable, хотя скорее всего в твоём контексте этот подход неправильный
Название: Re: QItemDelegate обновления данных
Отправлено: mutineer от Октябрь 22, 2012, 18:49
Если у тебя настолько острое желание менять это поле в этом методе, то используй mutable
Название: Re: QItemDelegate обновления данных
Отправлено: CJ1 от Октябрь 22, 2012, 18:50
kambala как вообще изменить данные комбобокса после его создания?
Название: Re: QItemDelegate обновления данных
Отправлено: CJ1 от Октябрь 22, 2012, 18:54
Спасибо! Не знал о существовании mutable И заодно еще о многом узнал!
|