qt使用C++语言利用QStandardItemModel在Qcombobox中加button
时间: 2024-02-23 08:58:26 浏览: 96
QT-树的实现-利用了QStandardItemModel-简单的Demo
您可以使用QItemDelegate来自定义QStandardItemModel中的项目,以显示一个按钮。以下是一个示例:
1. 继承QItemDelegate并重写createEditor()方法:
```
class ButtonDelegate : public QItemDelegate
{
public:
ButtonDelegate(QObject *parent = nullptr) : QItemDelegate(parent) {}
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const override
{
// 只有在第一列中显示一个按钮
if (index.column() == 0) {
QPushButton *button = new QPushButton("Click me", parent);
connect(button, &QPushButton::clicked, this, &ButtonDelegate::buttonClicked);
return button;
}
else {
return QItemDelegate::createEditor(parent, option, index);
}
}
signals:
void buttonClicked() const;
};
```
2. 在QComboBox中设置QStandardItemModel并使用上面的委托:
```
QComboBox *comboBox = new QComboBox(this);
QStandardItemModel *model = new QStandardItemModel(this);
model->setColumnCount(1);
model->appendRow(new QStandardItem("Item 1"));
model->appendRow(new QStandardItem("Item 2"));
comboBox->setModel(model);
comboBox->setItemDelegate(new ButtonDelegate(this));
connect(static_cast<ButtonDelegate*>(comboBox->itemDelegate()), &ButtonDelegate::buttonClicked, [=](){
qDebug() << "Button clicked!";
});
```
这样,第一列中的每个项目将显示一个标签为“Click me”的按钮。您可以通过连接ButtonDelegate的buttonClicked()信号来捕获按钮的单击事件。
阅读全文