如何在QT中编程更改QItemDelegate的值
我已经检查了很多看起来相似的主题,但它们并没有帮助,所以我要问这个问题。如果你知道任何重复的问题,已经存在,请直接告诉我 我的情况: 我有一个(QCombobox)QItemDelegate,用于QTableView的1列,带有QStandardModel。现在,当我直接编辑值或使用组合框进行选择时,它可以正常工作。但我也试图提供一个保存表状态的选项,以便在需要时重新加载它 问题是: 当我以编程方式设置项目时重新加载时,它不会反映在表中 我两个都试过了 1) 获取索引&使用setData和 2) 检索QStandardItem并设置文本 我还发现setEditorData没有被调用。我做错了什么?如何通过代码设置这样一个单元格的值 编辑:一些细节 我将QItemDelegate子类化为下拉列表 下拉列表如何在QT中编程更改QItemDelegate的值,qt,qcombobox,qitemdelegate,qstandarditemmodel,Qt,Qcombobox,Qitemdelegate,Qstandarditemmodel,我已经检查了很多看起来相似的主题,但它们并没有帮助,所以我要问这个问题。如果你知道任何重复的问题,已经存在,请直接告诉我 我的情况: 我有一个(QCombobox)QItemDelegate,用于QTableView的1列,带有QStandardModel。现在,当我直接编辑值或使用组合框进行选择时,它可以正常工作。但我也试图提供一个保存表状态的选项,以便在需要时重新加载它 问题是: 当我以编程方式设置项目时重新加载时,它不会反映在表中 我两个都试过了 1) 获取索引&使用setData和 2)
从一些代码示例开始,以提供更好的上下文。我添加了如您所说的代码,希望您可以尝试使用类似
model->item(row,3)->setData(value,Qt::EditRole)
为编辑器设置值hi感谢Riateche的想法。它不起作用,但我能够从中找出最初的问题(看起来我忘记保存一些列,所以它只是被重置而没有加载)。
#ifndef DROPDOWN_H
#define DROPDOWN_H
#include <QItemDelegate>
#include <QWidget>
#include <QStringListModel>
#include <QStringList>
class DropDown : public QItemDelegate
{
Q_OBJECT
public:
explicit DropDown(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 setComboData(QStringList list);
QStringList getComboData();
private:
QStringListModel *listmodel;
signals:
public slots:
};
#endif // DROPDOWN_H
#include "dropdown.h"
#include <QComboBox>
DropDown::DropDown(QObject *parent) :
QItemDelegate(parent)
{
listmodel = new QStringListModel(parent);
}
QWidget *DropDown::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QComboBox *editor = new QComboBox(parent);
editor->setEditable(true);
editor->setInsertPolicy(QComboBox::NoInsert);
editor->setModel(listmodel);
return editor;
}
void DropDown::setEditorData(QWidget *editor, const QModelIndex &index) const
{
QString value = index.model()->data(index,Qt::EditRole).toString();
QComboBox *original = static_cast<QComboBox *>(editor);
original->setCurrentIndex(original->findText(value));
}
void DropDown::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
QComboBox *original = static_cast<QComboBox *>(editor);
QString value = original->currentText();
model->setData(index, value, Qt::EditRole);
}
void DropDown::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
editor->setGeometry(option.rect);
}
void DropDown::setComboData(QStringList list)
{
listmodel->setStringList(list);
}
QStringList DropDown::getComboData()
{
return listmodel->stringList();
}
model = new QStandardItemModel(0,11, this);//i update row count later while adding items.
ui->itemTable->setModel(model);
sourceSet = new DropDown(this);
ui->itemTable->setItemDelegateForColumn(3, sourceSet);