0

我正在QTableWidgetItem为用户可能添加的每一行创建一个新实例,并将其添加QVectorQTableWidgetItems.

我想做类似以下的事情来命名以下迭代中的每个实例,并在实例名称中包含行号:

 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 回答