8

Qt 4.4で次のようにテーブルモデルを設定した後:

    QSqlTableModel *sqlmodel = new QSqlTableModel();

    sqlmodel->setTable("Names");
    sqlmodel->setEditStrategy(QSqlTableModel::OnFieldChange);
    sqlmodel->select();
    sqlmodel->removeColumn(0);

    tableView->setModel(sqlmodel);
    tableView->show();

コンテンツは正しく表示されますが、編集できません、エラー:

     QSqlQuery::value: not positioned on a valid record
4

3 に答える 3

12

Qt 4.5.1 で報告されたバグが正確に存在すること、およびドキュメント (例: here ) がまだ間違った例 (つまり、removeColumn呼び出しを含むもの) を提供していることを確認できます。

beforeUpdate回避策として、DB で更新されようとしている QSqlRecord の何が問題なのかを確認し、おそらく修正するという考えで、信号に接続されたスロットを書き込もうとしましたが、それを機能させることはできません-- そのレコード パラメータのメソッドを呼び出すと、おもちゃのアプリが BusError でクラッシュします。

だから私はその考えをあきらめて、間違いなくそれを行う正しい方法に切り替えました (可視性はモデルではなくビューによって決定されるべきですよね?-):removeColumn代わりに and を呼び出しtableView->setColumnHidden(0, true)ます。このようにして、ID は非表示になり、すべてが機能します。

ドキュメント エラーがあることを確認し、Qt トラッカーでそれに関する問題を開くことができるので、次のドキュメント ラウンドで修正できると思います。

于 2009-07-18T19:59:24.393 に答える
0

原因はこれにあったようです

sqlmodel->removeColumn(0);

コメントアウトした後、すべてが完全に機能します。したがって、テーブルに ID を表示しない別の方法を見つける必要があります ;-)

編集 「Qt開発の基礎」の例では、ヨハン・テリンも最初の列を削除したため、「そう思われる」と言いました。ですから、他の誰かがこれを試して結果を報告してくれるといいですね。

于 2009-06-26T13:03:36.883 に答える