특정 열의 각 행에 QComboBox를 보여주는 Qt의 테이블을 구현해야합니다.Qt, QStandarItemModel : 사용자 지정 QComboBox의 위임 항목이 모델의 인스턴스 작성자에서 내용을 채 웁니다.
이 질문에 기초 : QStandardItem + QComboBox 성공적으로 QItemDelegate를 생성 할 수있었습니다. 이 예제에서 QComboBox 내용은 ComboBoxDelegate 클래스에서 정적으로 정의되지만, 제 경우에는 QStandardItemModel이 만들어진 함수 내에서 QComboBox 내용을 정의해야합니다.
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);
}
가 그럼 난 대리자 클래스에서 콤보 상자의 내용을 복구 할 수 있어야한다 : 잘
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));
}
이 프로젝트는 컴파일하지만 때 내가
모델은 MainWindow를 클래스 메서드 내에서 정의된다 셀을 클릭하여 QComboBox 값을 변경하십시오. 프로그램이 충돌합니다. "잘못된 매개 변수가 C 런타임 함수에 전달되었습니다."
나는 문제가 어쩌면 바보 같은 실수는 것을 어떻게 든 느낌을 가지고,하지만 난 장님 그리고 ... 난 정말 당신이에 도움이 apprecciate 것이 꽤 시간이 여기 붙어 있기 때문에
당신은 전해 주 시겠어요 조언 좀 해줄 래?
미리 읽어 주셔서 감사합니다 !!!