1

データベースからデータをロードする Load というクラスが 1 つあります。もう 1 つのクラスは、テーブルにデータを表示することです。関数で QSqlQueryModel を返しています。これは、コンパイルできなかったため、現時点では基本的なものです。

QSqlQueryModel PersistenceAdapter::loadServerList(){

    login();
    cout<<"Loading data"<<endl;

    QSqlQueryModel  model = new QSqlQueryModel();

    logout();
    return model;
}

ヘッダーファイルで次のように定義します。

QSqlQueryModel loadServerList();

他のクラスでは、次のように受け取ります。

setServersList(PersistenceAdapter.loadServerList());

これの定義は次のとおりです。

void MainWindow::setServersList(QSqlQueryModel serverdata) {

    //this->servers = serverdata;
    //this->amodel->addData(serverdata);
}

エラーは次のとおりです。

PersistenceAdapter.cpp:66:48: エラー: 'QSqlQueryModel*' から非スカラー型 'QSqlQueryModel' への変換が要求されました /usr/include/qt4/QtCore/qabstractitemmodel.h: コピー コンストラクター 'QSqlQueryModel::QSqlQueryModel(const QSqlQueryModel&) 内': /usr/include/qt4/QtCore/qabstractitemmodel.h:360:5: エラー: 'QAbstractTableModel::QAbstractTableModel(const QAbstractTableModel&)' はプライベートです /usr/include/qt4/QtSql/qsqlquerymodel.h:59:20:エラー: このコンテキスト内 PersistenceAdapter.cpp: メンバー関数 'QSqlQueryModel PersistenceAdapter::loadServerList()': PersistenceAdapter.cpp:70:12: 注: 合成されたメソッド 'QSqlQueryModel::QSqlQueryModel(const QSqlQueryModel&)' がここで最初に必要です

誰かがそれで私を助けることができれば感謝します...

4

1 に答える 1

2

/usr/include/qt4/QtCore/qabstractitemmodel.h:360:5: エラー: 'QAbstractTableModel::QAbstractTableModel(const QAbstractTableModel&)' は非公開です

このエラーメッセージは、「値」セマンティクスをまったく持たないが、「アイデンティティ」に似た QObject をコピーしようとしていることを意味します。QObjects は本質的にコピーできません。その理由は、そのような場合に親子階層をどうするかということです。

これは、QObject サブクラス インスタンスを誤用しようとしている、つまりヒープではなくスタック オブジェクトとして宣言しようとしているというヒントを与えてくれます。

これは、コード内の問題のある場所です。

QSqlQueryModel  model = new QSqlQueryModel();

これは、次のように開始点が欠けているようです。

QSqlQueryModel *model = new QSqlQueryModel();
               ^

スタックではなくヒープにオブジェクトを割り当てようとしているようですが、それは良いことなので、おそらく単なるタイプミスです。

追加の注意事項の 1 つは、メモリ リークが発生しないことを確認してください。つまり、(直接的または間接的に) 親を設定するか、スマート ポインターを使用してください。私は前者を提案します。これにより、親が削除されたときにポインターが自動的に削除されることが保証されます。

于 2014-05-05T08:20:56.920 に答える