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

0

Я создаю новый экземпляр 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
    Я никогда не храню переменные для них. Я просто добавляю их в QTableWidget и подключаю сигналы / слоты, когда создаю объекты. Qt будет обрабатывать удаление, поэтому нет утечки памяти.
  • 0
    Что это значит: * checkBox% 1?
Показать ещё 5 комментариев
Теги:
dynamic
qt
qtablewidget
qtablewidgetitem

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";
}
  • 0
    Верный. Не каждому виджету нужно имя на C ++.
  • 0
    @ Чернобыль (и все): спасибо за пример. Это имеет смысл. Также спасибо за включение qobject_cast, в котором я также нуждался. Еще раз спасибо.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню