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

时间:2014-09-15 17:12:14

标签: c++ qt dynamic qtablewidget qtablewidgetitem

我为用户可能添加的每一行创建QTableWidgetItem的新实例,并将其添加到QVector 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]);

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

提前致谢。

1 个答案:

答案 0 :(得分: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";
}