モデルとデリゲートを介して(文字列の代わりに)QComboBox
挿入して、をカスタマイズしたい:QWidgets
QComboBox *cb = new QComboBox(this);
FeatureModel *featureModel = new FeatureModel(cb);
cb->setModel(featureModel);
ComboBoxItemDelegate *comboBoxItemDelegate = new ComboBoxItemDelegate(cb);
cb->setItemDelegate(comboBoxItemDelegate);
FeatureModelはQAbstractListModelを継承し、ComboBoxItemDelegateはQStyledItemDelegateを継承します。
問題は、デリゲートメソッドが呼び出されないため、カスタムウィジェットが挿入されないことです(の文字列のみが表示されますFeatureModel
)。ただし、のQTableView
代わりにを使用すると、正常QComboBox
に機能します。
誰かがエラーがどこにあるか知っていますか?QTモデル/ビューの概念のいくつかの重要な側面が欠けていますか?
編集: これが私の代表です。(もちろん)コンストラクターを除いて、次のメソッドは呼び出されません(コンソールに出力されません)。
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
}