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' は 1 番目に配置され、'cmb' は 2 番目に配置されます。このコードを使用すると、テーブルに 1 行を正常に追加できますが、2 行目を追加しようとすると、セグメンテーション エラーが発生します。this->list->setItem() 呼び出しでクラッシュします。

なぜクラッシュするのか考えていますか?

ありがとう!

4

4 に答える 4

0

私のコードのこの問題は、cellChanged SLOT のロジックが原因で発生しました。実際にはまだ作成されていない QTableWidget に setText を設定しようとしていました。

于 2016-08-02T10:55:46.050 に答える
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 を返すため、テーブルに最初の行を追加できますが、2 番目の行は追加できません。

解決策: 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

コードがそのまま機能しない理由はわかりませんが、次のようにします。

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 に答える