为了在QTableView
中显示一些数据,我使用一个函数来计算QStandardItemModel
,并将其发送回调用函数。
函数调用:
QStandardItemModel MyModel = computeMyModel();
ui->tV->setModel(&MyModel);
调用的函数
QStandardItemModel computeMyModel()
{
QStandardItemModel newModel;
//........... Steps to compute newModel
return newModel;
}
当我尝试运行代码时,我得到以下错误。
error C2248: 'QStandardItemModel::QStandardItemModel' : cannot access private member declared in class 'QStandardItemModel'
如何解决这个问题?(如何在没有引用调用的情况下成功地将myModel从一个函数传递到另一个函数?)
限制条件:
- 我只需要在
computeMyModel()
函数中计算模型 - 我不喜欢通过引用调用将模型从调用函数传递给
computeMyModel()
试试这个:
QStandardItemModel* computeMyModel()
{
int counter = 0;
QStandardItemModel *model = new QStandardItemModel;
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
{
counter++;
QStandardItem *item = new QStandardItem(QString::number(counter));
model->setItem(i,j,item);
}
return model;
}
使用:
QStandardItemModel *model = computeMyModel();
ui->tableView->setModel(model);
更新。
没有。这将是正常的,因为你分配内存并返回指针,你的指针有这个内存地址,它会一直有,直到有人删除它。要证明这一点,请参阅下面的代码片段。正如您所看到的,您在函数中分配内存,返回指针,使用该指针设置数据,并调用setModel。它编译并运行。
功能:
QStandardItemModel* computeMyModel()
{
QStandardItemModel *model = new QStandardItemModel;
return model;
}
使用
int counter = 0;
QStandardItemModel *model = computeMyModel();
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
{
counter++;
QStandardItem *item = new QStandardItem(QString::number(counter));
model->setItem(i,j,item);
}
ui->tableView->setModel(model);
实现这一点的另一种方法是传递之前创建的模型,并通过引用对其进行操作。
返回QStandardItemModel
是不可能的,因为它是不可访问的,并且发回指针也不起作用。
功能:
void computeMyModel(QStandardItemModel& model)
{
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
{
counter++;
QStandardItem *item = new QStandardItem(QString::number(counter));
model.setItem(i,j,item);
}
}
使用:
QStandardItemModel* model = new QStandardItemModel(0, 0, this);
computeMyModel(*model);
ui->tableView->setModel(model);