Qt,QStandarItemModel:自定义QComboBox上的委托项从模型的实例化器填充其内容

时间:2012-03-16 20:10:17

标签: qt qabstractitemmodel qvariant qstandarditemmodel

我需要在Qt中实现一个表,该表在特定列的每一行上显示QComboBox

基于这个问题:QStandardItem + QComboBox我成功地创建了QItemDelegate。在该示例中,QComboBox内容在ComboBoxDelegate类上静态定义,但在我的情况下,我需要在函数中定义创建QComboBox的{​​{1}}内容。 / p>

模型在QStandardItemModel类方法中定义:

MainWindow

然后我应该能够从委托类中恢复void MainWindow::fooHandler() { QStandardItemModel* mymodel = new QStandardItemModel; ui->tablePoint->setModel(mymodel); ComboBoxDelegate* delegate=new ComboBoxDelegate; ui->tablePoint->setItemDelegateForColumn(2,delegate); QStringList Pets; Pets.append("cat"); Pets.append("dog"); Pets.append("parrot"); // So far this is how I tried to store data under `Qt::UserRole` in "mymodel": QModelIndex idx = mymodel->index(0, 2, QModelIndex()); mymodel->setData(idx,QVariant::fromValue(Pets), Qt::UserRole); //Now i fill the table with some values... QList< QStandardItem * > items; items.clear(); items << new QStandardItem("col0"); items << new QStandardItem("col1"); items << new QStandardItem("parrot"); items << new QStandardItem("col3"); mymodel->appendRow(items); items.clear(); items << new QStandardItem("col0"); items << new QStandardItem("col1"); items << new QStandardItem("cat"); items << new QStandardItem("col3"); mymodel->appendRow(items); } 内容:

ComboBox

该项目编译得很好,但是当我点击一个单元格更改void ComboBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QString value = index.model()->data(index, Qt::EditRole).toString(); QComboBox *cBox = static_cast<QComboBox*>(editor); if(index.column()==2) { QModelIndex idx = index.model()->index(0, 2, QModelIndex()); cBox->addItem( index.model()->data(idx,Qt::UserRole).toStringList().at(0) ); cBox->addItem( index.model()->data(idx,Qt::UserRole).toStringList().at(1) ); cBox->addItem( index.model()->data(idx,Qt::UserRole).toStringList().at(2) ); } cBox->setCurrentIndex(cBox->findText(value)); } 值时程序崩溃,我得到一个“无效参数传递给C运行时函数。”

1 个答案:

答案 0 :(得分:2)

我的问题是我在将行追加到模型之前尝试使用mymodel-&gt; setdata()。

所以如果一开始我应该这样做:

QList< QStandardItem * > items;
items.clear();
items << new QStandardItem("col0");
items << new QStandardItem("col1");
items << new QStandardItem("parrot");
items << new QStandardItem("col3");
mymodel->appendRow(items);

然后才......

QModelIndex idx = mymodel->index(0, 2, QModelIndex());
mymodel->setData(idx,QVariant::fromValue(Pets), Qt::UserRole);

这解决了这个问题。

谢谢大家。

相关问题