我正在使用以下代码向QTableWidget添加一行。
QTableWidgetItem *item = new QTableWidgetItem(fileName);
item->setCheckState(Qt::Checked);
QComboBox *cmb = new QComboBox(this->list);
cmb->addItem("one");
cmb->addItem("two");
this->list->setRowCount(this->list->rowCount()+1);
this->list->setItem(this->list->rowCount()-1,0,item);
this->list->setCellWidget(this->list->rowCount()-1,1,cmb);
表格中有2列。 'item'放在第一个中,'cmb'放在第二个中。使用此代码,我可以成功地向表中添加1行,但是当我尝试添加第二行时,我会遇到分段错误。 它在this-> list-> setItem()调用时崩溃。
知道它崩溃的原因吗?
谢谢!
答案 0 :(得分:0)
我不知道为什么你的代码不能正常工作,但是这样做:
int N = list->rowCount(); //The problem may lie in multiple rowCount() calls somehow
list->insertRow(N);
list->setItem(N,0,item);
list->setCellWidget(N,1,cmb);
另外,您使用'this->'是否有特殊原因?在这种情况下,这通常是完全多余的。
答案 1 :(得分:0)
我的代码与你非常相似,也崩溃了......
QTableWidgetItem* columnOne = new QTableWidgetItem();
columnOne->setCheckState(Qt::Checked);
QTableWidgetItem* columnTwo = new QTableWidgetItem("Some Text");
int row = tableWidget->rowCount();
tableWidget->insertRow(row);
tableWidget->setItem(row, 0, columnOne);
tableWidget->setItem(row, 1, columnTwo);
但是,如果我更改了setItem调用的顺序,以便最后添加检查状态,那么它可以工作。所以这是代码工作......
QTableWidgetItem* columnOne = new QTableWidgetItem();
columnOne->setCheckState(Qt::Checked);
QTableWidgetItem* columnTwo = new QTableWidgetItem("Some Text");
int row = tableWidget->rowCount();
tableWidget->insertRow(row);
tableWidget->setItem(row, 1, columnTwo);
tableWidget->setItem(row, 0, columnOne);
答案 2 :(得分:0)
问题在此行中(您将某个列表和QTableWidget命名为相同:" list"):
这 - >列表 - > setRowCount(这 - >列表 - > rowCount时()+ 1)
this->list->rowCount()+1
将始终返回0 + 1 = 1,因此您可以在表格中添加第一行而非第二行。
解决方案:将您的QTableWidget命名为" list",例如:
this->myTableWidget->setRowCount(this->list->rowCount()+1);
this->myTableWidget->setItem(this->list->rowCount()-1,0,item);
this->myTableWidget->setCellWidget(this->list->rowCount()-1,1,cmb);
答案 3 :(得分:0)
我的代码中的这个问题是因为cellChanged SLOT中的逻辑而发生的。我试图在QTableWidget中设置尚未实际创建的文本。