2009-06-24 14 views
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 
+0

実行しているクエリのコードを貼り付けることはできますか? – nmuntz

+1

質問はありません。 QSqlQueryModelにはクエリが必要です。代わりに、QSqlTableModelはテーブルを表示します(テーブルの編集も可能です)。 "QSqlTableModelは、単一のテーブルを表示するための編集可能なモデルを提供します...結果のビューは、モデルが編集可能であるため編集可能です。 Johan Thelinの "Foundations of Qt development"から – MadH

答えて

12

Qt 4.5.1でバグが報告されていることを確認できます。 hereは、間違った例(つまり、removeColumn呼び出しを含む例)を示しています。

回避策として、beforeUpdate信号に接続されたスロットを書き込もうとしました.QSqlRecordがDB内で更新されようとしていることを確認し、それを動作させる - そのレコードパラメータのメソッドを呼び出すと、私のtoy-appがBusErrorでクラッシュします。

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

私は文書の誤りがあることを確認し、それに関する問題をQtトラッカーで開くことができると思いますので、次の文書で修正することができます。

+0

はい、ありがとう! :-) – MadH

+3

は私の評判のすべてを費やして:-)) – MadH

0

この原因は、それをコメントアウトした後の行にすべての作業perfec

sqlmodel->removeColumn(0); 

だったようですtly。 はこのように、私は;-)

テーブルにIDを示すためではない別の方法を見つける必要があるでしょうEDIT ため、私は例の「Qtの開発の基礎」ヨハンから、「それはそう」と言ってきましたThelinも最初の列を削除しました。だから、他の誰かがこれを試して結果を報告してもいいと思う。

0

私はPyQtでQt 4.6.1を使用していますが、問題はまだあります。 "removeColumn(0)"を削除すると、問題が解決されます。