C++ 实现QlistWidget单个单元格设置代理
时间: 2023-10-01 09:09:09 浏览: 156
利用代理的方式向QtableWidegt 中添加各种控件
在 QListWidget 中,可以使用 QItemDelegate 实现对单个单元格的自定义代理设置。下面是一个简单的示例,演示如何使用 QComboBox 设置某个单元格的代理:
```cpp
#include <QApplication>
#include <QListWidget>
#include <QComboBox>
#include <QItemDelegate>
class ComboBoxDelegate : public QItemDelegate
{
public:
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
QComboBox *editor = new QComboBox(parent);
editor->addItem("Option 1");
editor->addItem("Option 2");
editor->addItem("Option 3");
return editor;
}
void setEditorData(QWidget *editor, const QModelIndex &index) const override
{
QString value = index.model()->data(index, Qt::EditRole).toString();
QComboBox *comboBox = static_cast<QComboBox*>(editor);
comboBox->setCurrentText(value);
}
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
{
QComboBox *comboBox = static_cast<QComboBox*>(editor);
QString value = comboBox->currentText();
model->setData(index, value, Qt::EditRole);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QListWidget *listWidget = new QListWidget();
listWidget->addItem("Item 1");
listWidget->addItem("Item 2");
listWidget->addItem("Item 3");
// 设置某个单元格的代理
ComboBoxDelegate *delegate = new ComboBoxDelegate;
listWidget->setItemDelegateForItem(listWidget->item(1), delegate);
listWidget->show();
return a.exec();
}
```
在上面的示例中,我们定义了一个 ComboBoxDelegate 类,继承自 QItemDelegate,并重写了 createEditor、setEditorData 和 setModelData 三个函数,实现了对单元格的代理设置。然后,我们将这个自定义代理设置给第 2 个 item,然后在该 item 上显示一个空 QListWidgetItem,这样就可以通过该项 QListWidgetItem 包含的编辑器控件,来编辑该 item 的值。运行程序,可以看到第 2 个 item 变成了一个 QComboBox,可以通过它来选择不同的选项。
阅读全文