如何从函数传递 QStandardItemModel?

Posted

技术标签:

【中文标题】如何从函数传递 QStandardItemModel?【英文标题】:How to pass QStandardItemModel from a function? 【发布时间】:2014-09-16 12:37:17 【问题描述】:

为了显示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 继承自 QObject,因此不能使用它的复制构造函数(在 QObject 中标记为私有)。在堆上分配它并通过指针传递给你的函数 【参考方案1】:

试试这个:

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

更新。

没有。这将是正常的,因为你分配内存并返回指针,你的指针有这个内存地址,它会一直拥有它,直到有东西删除它。为了证明,看这段代码sn-p。如您所见,您在函数中分配内存、返回指针、使用此指针设置数据并调用 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);

【讨论】:

嗨@Chernobyl,它按预期工作。但我还有一个疑问。由于我从 computeMyModel() 函数中传递了一个指向 QStandardItemModel 的指针,所以一旦函数超出范围,指针会不会超出范围? QstandardItemModel 指针model 在函数内部声明! 感谢您对指针内存分配的解释。我对你的答案投了赞成票

以上是关于如何从函数传递 QStandardItemModel?的主要内容,如果未能解决你的问题,请参考以下文章

如何从javascript中的异步函数传递参数? [复制]

如何测试从 mapDispatchToProps 传递的函数(React/Redux/Enzyme/Jest)

如何将数组变量从 VBA 传递到 vb.net 函数

如何在bash脚本中通过函数调用将参数/参数从一个函数传递到另一个函数[重复]

如何从 Blade 格式 HTML 将 PHP 变量传递给 JavaScript 函数

如何将函数从父级传递给深层嵌套的子级并将@input 值用于Angular 8中传递的函数?