0

我正在使用以下代码向 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

4 回答 4

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->”有什么特别的原因吗?在这种情况下,它通常是完全多余的。

于 2011-03-27T01:06:41.940 回答
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);
于 2012-09-14T20:11:31.487 回答
0

问题出在这一行(您将一些列表和 QTableWidget 命名为相同:“列表”):

this->list->setRowCount(this->list->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);
于 2013-06-04T08:16:55.710 回答
0

我的代码中的这个问题是由于 cellChanged SLOT 中的逻辑而发生的。我试图在尚未实际创建的 QTableWidget 中设置文本。

于 2016-08-02T10:55:46.050 回答