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 に答える