gpt4 book ai didi

qt - QStandardItem + QComboBox

转载 作者:行者123 更新时间:2023-12-04 03:30:59 26 4
gpt4 key购买 nike

我想把 QComboBox变成 QStandardItem用于 QStandardItemModel .我一直在环顾四周,我找不到答案,有什么想法吗?

最佳答案

您不存储 QComboBoxQStandardItemModel .假设您有以下选择:

一种

C
D

并且您有一个列表,其中包含两个项目 QListView ,第一个值为 A,第二个值为 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 上设置委托(delegate)要使其工作,请参阅:
pView->setItemDelegate(new ComboBoxDelegate(pView));

关于qt - QStandardItem + QComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3135505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com