如何从函数传递QStandardItemModel



为了在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()

试试这个:

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);

相关内容

  • 没有找到相关文章

最新更新