1

为了在 中显示一些数据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 从一个函数传递到另一个函数?)

约束:

  1. 我只需要在computeMyModel()函数中计算模型。
  2. 我不喜欢通过引用将模型从调用函数传递给computeMyModel()通过调用。
4

1 回答 1

3

尝试这个:

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);
于 2014-09-16T12:45:38.787 回答