Я создаю новый экземпляр 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]);
}
Это возможно? Как я могу обойти эту проблему? Все, что мне нужно, — это добавить новые виджеты в массив, не называя их явно. Заранее спасибо!
Заранее спасибо.
Попробуйте что-то вроде этого:
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";
}