8
我想把一個QComboBox放入一個QStandardItem中以用於QStandardItemModel。我一直在四處尋找,我找不到答案,有什麼想法?QStandardItem + QComboBox
我想把一個QComboBox放入一個QStandardItem中以用於QStandardItemModel。我一直在四處尋找,我找不到答案,有什麼想法?QStandardItem + QComboBox
您不要將QComboBox存儲在QStandardItemModel中。比方說,你有以下選擇:
一個 乙 Ç d
,你必須在一個而QListView,第一個值是一個第二個是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));
這回答了一個我問題可能會幫助你:http://stackoverflow.com/questions/6764790/which-model-to-subclass-view-to-use-for-a-list-of-custom-objects/6769603#6769603 – Sam 2011-07-24 09:35:56