11 #include <QtGui/QComboBox>
12 #include <QtGui/QSortFilterProxyModel>
19 QItemDelegate(parent),
20 mpComboItems(pComboItems),
23 mCommitOnSelect(commitOnSelect)
30 const QStyleOptionViewItem &
C_UNUSED(option),
31 const QModelIndex & index)
const
33 QModelIndex SourceIndex = index;
34 const QAbstractItemModel *pModel = index.model();
36 while (pModel->inherits(
"QSortFilterProxyModel"))
38 SourceIndex =
static_cast< const QSortFilterProxyModel *
>(pModel)->mapToSource(index);
39 pModel = SourceIndex.model();
42 QComboBox *pEditor =
new QComboBox(parent);
44 if (
getItems(SourceIndex.row()) != NULL)
46 pEditor->addItems(*
getItems(SourceIndex.row()));
52 connect(pEditor, SIGNAL(destroyed(QObject *)),
this, SLOT(
slotEditorDeleted(QObject *)));
58 const QModelIndex &index)
const
60 QString value = index.model()->data(index, Qt::DisplayRole).toString();
61 QComboBox *comboBox =
static_cast<QComboBox*
>(editor);
63 comboBox->blockSignals(
true);
64 comboBox->setCurrentIndex(comboBox->findText(value));
65 comboBox->blockSignals(
false);
69 const QModelIndex &index)
const
71 QComboBox *comboBox =
static_cast<QComboBox*
>(editor);
72 QVariant value(comboBox->currentText());
73 model->setData(index, value, Qt::EditRole);
77 const QStyleOptionViewItem &option,
const QModelIndex &
C_UNUSED(index))
const
79 editor->setGeometry(option.rect);
94 QMap< int, const QStringList * >::const_iterator found =
mRowToItems.find(row);
106 QComboBox * pEditor =
dynamic_cast< QComboBox *
>(sender());
110 QMap< QWidget * , QModelIndex >::const_iterator found =
mEditorToIndex.find(pEditor);
147 const QModelIndex &index)
const
149 QComboBox *comboBox =
static_cast<QComboBox*
>(editor);
150 QVariant value(comboBox->currentIndex());
151 model->setData(index, value, Qt::EditRole);
virtual void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
CQComboDelegate(const QStringList *pComboItems, QObject *parent=NULL, bool commitOnSelect=true)
virtual void setEditorData(QWidget *editor, const QModelIndex &index) const
const QStringList * mpComboItems
QMap< QWidget *, QModelIndex > mEditorToIndex
bool isCommitOnSelect() const
void currentIndexChanged(int, int)
virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
virtual void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
const QStringList * getItems(int row) const
CQIndexComboDelegate(const QStringList *pComboItems, QObject *parent=NULL)
virtual ~CQComboDelegate()
QMap< int, const QStringList * > mRowToItems
void setCommitOnSelect(bool commitOnSelect)
virtual QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
virtual ~CQIndexComboDelegate()
void setItems(int row, const QStringList *pComboItems)
void slotEditorDeleted(QObject *pObject)
void slotCurrentIndexChanged(int index)