ローカルのdb-FileからSQLデータをQML-Tableviewに表示し、SQLデータベースを編集したいと思っています。 約3週間後に私ができること:QML-Tableviewに自分のデータを表示する。私は本当にQSqlTableModelをサブクラス化する必要があるかどうかはわかりません。サブクラス化がまったく必要でない場合、私は間違いなく喜んでいます。サブクラス化QSqlTableModel新しい値を挿入
私のmain.cppで私のモデルを作成し、直接レコードを追加する必要があります。
// Create an instance of the SqlModel for accessing the data
SqlDataModel *sqlModel;
sqlModel = new SqlDataModel(0,base.database());
sqlModel->setTable("diaBaneDatabase");
sqlModel->setSort(0, Qt::AscendingOrder);
sqlModel->setEditStrategy(QSqlTableModel::OnFieldChange);
sqlModel->select();
QSqlRecord record(sqlModel->record());
record.setValue(0,50);
record.setValue(3,222);
sqlModel->insertRecord(-1, record);
sqlModel->submitAll();
これにより、4番目の列に222が追加されます。しかし、何が私のsqlDatabaseに保存されません
マイSqlDataModel :: setDataメソッドloolksこのように:
bool SqlDataModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
qDebug() << index.column() << " " << index.row() << " " << value << " ---- " << role;
qDebug() << roles[Qt::UserRole + 1];
//qDebug() << QSqlTableModel::setData(modelIndex, value);
qDebug() << QSqlQueryModel::setData(index, value);
return false;
}
出力は次のようになります。
0 39 QVariant(int, 50) ---- 2
"id"
false
1 39 QVariant(QString, "") ---- 2
"id"
false
2 39 QVariant(QString, "") ---- 2
"id"
false
3 39 QVariant(int, 222) ---- 2
"id"
false
4 39 QVariant(double, 0) ---- 2
"id"
false
5 39 QVariant(int, 0) ---- 2
"id"
false
6 39 QVariant(double, 0) ---- 2
"id"
false
7 39 QVariant(double, 0) ---- 2
"id"
false
私のsetDataメソッドが間違っていることを確認するために、私ドンそこで何が起こるべきかを理解していないし、これについての例は見つけられなかった。
QSqlTableModelをサブクラス化してモデルをQQmlContextを通してQMLに配置する必要があると誤っています。私の列名のような名前のロールで列を表示するのですか?そうでなければ私はQMLTableviewの列1の内容を置くことができる方法:
TableViewColumn {
role: "id" // what should be the role if I don't subclass???
title: "ID"
width: 80
}
私は任意のヘルプ、コメント、たとえば、他の支柱またはさらに前方に私をもたらします何のために満足している...おかげ
【こちら】(https://wiki.qt.io/QML_and_QSqlTableModel)あなたが良い例を持っています。 – Tarod
残念ながら、この例は、SQLデータを表示しながら、私が見つけることができる最大限のように終わります。しかし、私が探しているのは、 "setData-Method"でSQLデータベースにデータを編集または追加することです。 –
OK私はすべてが正しいと理解していないようです。 setDataをサブクラス化する必要はありません。私はこれを書きました: 'QSqlRecord record = sqlModel-> record(); record.setValue( "id"、87); // qDebug()<< record.fieldName(0)<< "_" << record.value(0); qDebug()<< sqlModel-> insertRecord(-1、record); qDebug()<< sqlModel-> submitAll(); 'これは時々ジョブを行いますが、submitAll()はfalseを返します。私はそれがときどき行を塗りつぶし、時にはうまくいかない理由を理解していません。 –