0

QTableWidgetItemユーザーが追加できる行ごとに の新しいインスタンスを作成し、それをQVectorof に追加していQTableWidgetItemsます。

インスタンス名に含まれる行番号を使用して、次の反復で各インスタンスに名前を付けるために、次のようなことをしたいと思います。

 QVector<QCheckBox> *checkBox_array;

  for(int r=0;r<user_input;r++)
  {
      ui->tableWidget->insertRow(r);        
      *checkBox%1.arg(r) = new QCheckBox;   //create an instance "checkBox1" here
      checkBox_array->pushBack(checkBox%1.arg(r))            
  }

または、現在の状態ではコンパイルされない次のようなもの:

 for(int r=0;r<7;r++)
{
  ui->tableWidget->insertRow(r);


  checkBox_array->push_back();
  checkBox_array[r] = new QCheckBox;
  ui->tableWidget->setCellWidget(r,2,checkBox_array[r]);

}

これは可能ですか?この問題を回避するにはどうすればよいですか? 必要なのは、明示的に名前を付けなくても新しいウィジェットを配列に入れることだけです。前もって感謝します!

前もって感謝します。

4

1 に答える 1

3

次のようなことを試してください:

for(int r=0;r<7;r++)
{
 ui->tableWidget->insertRow(r);
 ui->tableWidget->setCellWidget(r,2,new QCheckBox(QString("checkBox%1").arg(r)));
}

いくつかのウィジェットを作成します。

このウィジェットで何かを変更したり、データを取得したりしたい場合は、cellWidget()メソッドを使用しますが、キャストすることを忘れないでください! 例えば:

for(int r=0;r<7;r++)
{
 QCheckBox* curBox = qobject_cast<QCheckBox*>(ui->tableWidget->cellWidget(r,2));
 if(curBox)
 {
    qDebug() << curBox->text() << curBox->isChecked();
    curBox->setText("This is new Text");
 }
 else
     qDebug() << "fail";
}
于 2014-09-15T17:25:05.290 に答える