动态和顺序命名和实例化小部件qt



我为用户可能添加的每一行创建一个QTableWidgetItem的新实例,并将其添加到QTableWidgetItemsQVector中。

我想做下面这样的事情,用实例名称中包含的行号来命名下面迭代中的每个实例:

 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]);
}

这可能吗?我如何解决这个问题?我所需要的只是将新的小部件放入数组中,而不必显式地命名它们。提前感谢!

提前谢谢。

试试这样的东西:

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";
}

最新更新