簡體   English   中英

如何從函數中傳遞QStandardItemModel?

[英]How to pass QStandardItemModel from a function?

為了在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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM