qt c++ Qtreeview控件中添加QCombobox控件
时间: 2024-05-07 07:17:00 浏览: 183
Qt QComboBox下拉弹出QTreeView代码
可以在 QTreeView 的 delegate 中重新实现 createEditor() 函数,使其返回一个 QComboBox。然后在 setModelData() 中保存 QComboBox 的值。具体代码实现可以参考以下示例:
```cpp
class ComboBoxDelegate : public QStyledItemDelegate
{
public:
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
if (index.column() == 0)
{
return QStyledItemDelegate::createEditor(parent, option, index);
}
else
{
QComboBox* comboBox = new QComboBox(parent);
comboBox->addItem("Item1");
comboBox->addItem("Item2");
comboBox->addItem("Item3");
return comboBox;
}
}
void setEditorData(QWidget* editor, const QModelIndex& index) const override
{
if (QComboBox* comboBox = qobject_cast<QComboBox*>(editor))
{
QString value = index.model()->data(index, Qt::EditRole).toString();
int index = comboBox->findText(value);
comboBox->setCurrentIndex(index);
}
else
{
QStyledItemDelegate::setEditorData(editor, index);
}
}
void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override
{
if (QComboBox* comboBox = qobject_cast<QComboBox*>(editor))
{
QString value = comboBox->currentText();
model->setData(index, value, Qt::EditRole);
}
else
{
QStyledItemDelegate::setModelData(editor, model, index);
}
}
};
QTreeView* treeView = new QTreeView;
treeView->setModel(model);
treeView->setItemDelegate(new ComboBoxDelegate);
```
以上代码将在 index.column() == 0 的情况下使用默认的编辑器,而在其他情况下使用 QComboBox 作为编辑器,并设置 QComboBox 中的选项。在 setEditorData() 中从 model 中获取值并将其设置为 QComboBox 的当前选项。在 setModelData() 中将 QComboBox 的当前值保存到 model 中。
阅读全文