2016-05-10 17 views
0

QtでMatrix Calculatorを使用していて、問題が発生しました。私はこれを行う:C++ Qt - QTableWidgetアイテムの値を設定する

void ShowMatrix::updateTable() 
{ 
    int w = 323 - 305; 
    int h = 300 - 227 + 15; 

    for(int i = 0; i < matrix->getRows(); i++) 
    { 
     ui->tableWidget->insertRow(i); 
     h += 35; 
    } 
    for(int j = 0; j < matrix->getColumns(); j++) 
    { 
     ui->tableWidget->insertColumn(j); 
     w += 50; 
    } 

    this->resize(w, h); 
    this->setMinimumSize(w, h); 

    ui->retranslateUi(this); 


    this->setWindowTitle(matrix->getName()); 
    emit updatingDone(); 

} 

その後、更新するときに();シグナルが放射されると、このスロットが起動します:

void ShowMatrix::setValues() 
{ 
    QString str; 
    for(int i = 0; i < matrix->getRows(); i++) 
     for(int j = 0; j < matrix->getColumns(); j++) 
     { 
      ui->tableWidget->item(i, j)->setText("1"); 
     } 
    ui->retranslateUi(this); 
} 

すべてのセルの値を1に設定したいだけです。私はアイテムで何もできません。フラグや値などを設定するなど、私がそれらとやろうとしていることすべてがアプリケーションをクラッシュさせます。もし私がupdatingDone()シグナルを出さなければ、すべて正常に動作します。

答えて

1

あなたはこのスロットを使用しようとすることができます:あなたは、テーブルウィジェットに新しい行および/または列を追加するとき

void ShowMatrix::setValues() 
{ 
    QString str; 
    for(int i = 0; i < matrix->getRows(); i++) 
     for(int j = 0; j < matrix->getColumns(); j++) 
     { 
      QTableWidgetItem *item = ui->tableWidget->item(i, j); 
      if(!item) { 
       item = new QTableWidgetItem(); 
       ui->tableWidget->setItem(i, j, item); 
      } 
      item->setText("1"); 
     } 
    ui->retranslateUi(this); 
} 

だから、これらの追加のセル(複数可)まだnullです。だから、最初にQTableWidget-> setItemを使ってこれらのセルにQTableWidgetItemを置く必要があります。

+0

すべての行と列が正しく追加されています。私は行数を使用しませんが、matrix-> getRows()は0を返しません。どのように私は知っていますか? QTableWidgetはすべての列と行で正しく生成されますが、それらは空です。私がこの行をコメントアウトした場合: ui-> tableWidget-> item(i、j) - > setText( "1"); すべて正常に動作しますが、フィールドは空です。 – MindRoller

+1

上記のupdateTableを無視し、私のスロットを試してください – Apin

+0

私はあなたのソリューションを試してみましたが、それは動作しますが、理由を説明できますか?私が言ったように、行と列は正しく作成されていましたが、値を設定できませんでした。なぜこのように動作しないのか分かりません。 – MindRoller

関連する問題