我为用户可能添加的每一行创建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]);
}
这可能吗?我该如何解决这个问题?我只需要将新的小部件放入数组中,而不必明确命名它们。提前谢谢!
提前致谢。
答案 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";
}