Динамическое и последовательное именование и создание экземпляров виджетов qt

Я создаю новый экземпляр 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 ответ

Решение

Попробуйте что-то вроде этого:

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";
}
Другие вопросы по тегам