1 ответ:
Вы не храните
QComboBoxвQStandardItemModel. Допустим, у вас есть следующие варианты:A Б С D
И у вас есть список с двумя элементами в A
QListView, первое значение-A, второе-D:QListView* pView = new QListView(); QStandardItemModel* pModel = new QStandardItemModel(); pView->setModel(pModel); pModel->appendRow(new QStandardItem("A")); pModel->appendRow(new QStandardItem("D"));То, что мы создали выше, - это виджет списка, который будет отображать значения "A" и "D". Теперь перейдем к
QComboBox. Я предполагаю, что вы хотите, чтобы изменить значения "A" и " D " в списке. Для этого вам нужно создатьQItemDelegate.См. http://doc.qt.io/qt-4.8/qitemdelegate.html
Попытка:
class ComboBoxDelegate : public QItemDelegate { Q_OBJECT public: ComboBoxDelegate(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; }; ComboBoxDelegate::ComboBoxDelegate(QObject *parent) : QItemDelegate(parent) { } QWidget *ComboBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &/* index */) const { QComboBox *editor = new QComboBox(parent); editor->addItem("A"); editor->addItem("B"); editor->addItem("C"); editor->addItem("D"); return editor; } void ComboBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QString value = index.model()->data(index, Qt::EditRole).toString(); QComboBox *cBox = static_cast<QComboBox*>(editor); cBox->setCurrentIndex(cBox->findText(value)); } void ComboBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QComboBox *cBox = static_cast<QComboBox*>(editor); QString value = cBox->currentText(); model->setData(index, value, Qt::EditRole); } void ComboBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const { editor->setGeometry(option.rect); }И затем вам нужно установить делегат на
QListView, чтобы заставить его работать, см.:pView->setItemDelegate(new ComboBoxDelegate(pView));
Comments