I want to customize QComboBox by inserting QWidgets (instead of strings) through the model and delegate:
QComboBox *cb = new QComboBox(this); FeatureModel *featureModel = new FeatureModel(cb); cb->setModel(featureModel); ComboBoxItemDelegate *comboBoxItemDelegate = new ComboBoxItemDelegate(cb); cb->setItemDelegate(comboBoxItemDelegate);
FeatureModel inherits from QAbstractListModel and ComboBoxItemDelegate inherits from QStyledItemDelegate.
The problem is that delegate methods are never called, so my custom widget is not inserted (I only see FeatureModel lines). However, if I use QTableView instead of QComboBox, it works as it should.
Does anyone know where the error is? Am I missing some important aspect of the QT Model / View concept?
I appreciate every help.
Regards, Magnus
EDIT: Here is my delegate. With the exception of the constructor (of course), none of the following methods are called (there is no console output).
ComboBoxItemDelegate::ComboBoxItemDelegate(QObject *parent) : QStyledItemDelegate(parent) { qDebug() << "Constructor ComboBoxItemDelegate"; } ComboBoxItemDelegate::~ComboBoxItemDelegate() { } QWidget* ComboBoxItemDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const { qDebug() << "createEditor"; // never called QWidget *widget = new QWidget(parent); Ui::ComboBoxItem cbi; cbi.setupUi(widget); cbi.label->setText(index.data().toString()); widget->show(); return widget; } void ComboBoxItemDelegate::setEditorData ( QWidget *editor, const QModelIndex &index ) const { qDebug() << "setEditorData"; // never called } void ComboBoxItemDelegate::setModelData ( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const { qDebug() << "setModelData"; // never called }
source share