如何从函数传递 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何测试从 mapDispatchToProps 传递的函数(React/Redux/Enzyme/Jest)
如何在bash脚本中通过函数调用将参数/参数从一个函数传递到另一个函数[重复]