使用Qt的QTableWidget setItem()分段错误

时间:2011-03-26 17:01:43

标签: qt segmentation-fault fault qtablewidget

我正在使用以下代码向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()调用时崩溃。

知道它崩溃的原因吗?

谢谢!

4 个答案:

答案 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中设置尚未实际创建的文本。