1

から派生したクラスがありQSqlRelationalTableModelます。SQLiteデータベースを使用しています。そして、データベースファイルを変更する必要があります。古いデータベースファイルを閉じ、SetDatabaseName( "新しいファイルへのパス")を呼び出して、新しいデータベースファイルを開きます。モデルに対してselect()を呼び出すだけですが、falseが返されます。そして、setTable( "table")を呼び出し、その後select()を呼び出すと、すべてが機能します...しかし、テーブルの名前は同じです...

データベース接続が変更されたことをモデルに通知できる方法が見つかりませんでした。モデルに通知するためのより良い方法を知っていますか?


Ok。もう一度このトピックに戻りました。

dbを変更した後、同じテーブル名でsetTable()を呼び出して、テーブルモデルを再開する必要があります。そして、私はテーブルビューを再開するためのより良い方法を見つけられませんでした。

pTableView->setModel(NULL);
pTableView->setModel(model);

これにより、多くの不要なコード呼び出しが生成されますが、それ以外の場合、テーブルビューはテーブルモデルの変更(列数など)を認識しません。

QSqlTableModel再初期化するためのより良い方法が見つかりませんでしたQTableView。いくつかのアイデア?

4

2 に答える 2

2
// create your model(parent=0, QSqlDatabase::database());
// set your table model->setTable("tablename");
tableview->setModel(this->model)
bool ok = model->select() // model should populate itself and refresh tableView as well
于 2013-03-28T14:44:33.263 に答える
0

それは私のせいでした:(ソースの助けを借りて、select()がfalseを返す場合を見つけました。そして、新しいデータベースのテーブルの1つのフィールド名が1文字欠けています:(したがって、selectを使用したQSqlQueryはエラーを返しました。setTable呼び出しは、のフィールド名を更新しますテーブルなので、select は true を返します。

于 2011-12-15T08:11:46.547 に答える