問題タブ [qsqltablemodel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 選択を保持しながらQSqlTableModelを更新するにはどうすればよいですか?
QSqlTableModel
とを使用してQTableView
SQLiteデータベーステーブルを表示しています。
テーブルを1秒ごとに自動更新してもらいたいです(非常に大きなテーブルにはなりません-数百行)。そして、私はこれを行うことができます-そのように:
しかし、これは私が持っている選択を削除するので、選択は最大1秒しか続きません。GUIの別のペインは何を選択するかによって異なるため、これは煩わしいことです。何も選択されていない場合は、説明のスプラッシュページにリセットされます。
次に、選択した行番号を取得し、テーブルをリセットしてから、その行を選択する、ややハッキーなアプローチを試しました。ただし、選択した行はテーブルへの追加に基づいて上下に移動できるため、これも機能しません。
私は他のクラスがdataChanged()
理想的な信号を持っていることを知っています。
(コマンドラインの使用法またはプログラムの他のインスタンスからの)データベースへの変更を反映し、現在の選択を維持するためにテーブルを更新する方法を知っている人はいますか?
現在の選択からデータを取得し、リセット後に同じ行を検索して再選択できることはわかっていますが、これは逆効果で問題の悪い解決策のようです。
編集:解決策の現在の試み:
さて、これは多かれ少なかれ今は機能します...
sql - QTableView と QSqlTableModel によるグリッドのようなインライン編集
QTableView をグリッド テーブルのように動作させようとしています。つまり、ユーザー入力の新しいレコードが挿入される場所には、常に 1 つの空の行があります。MS Access のサブフォームを考えてみてください。または、Web 開発ではインライン編集と呼んでいると思います。
私はかなり標準的なコードであるQt 4.7.4を使用しています:
コンストラクターに insertRow または insertRecord を指定しても、何も起こりません。行は追加されません。しかし、それらのいずれかを呼び出すプッシュボタンを作成すると、新しい行が追加されますが、編集できません。
これを観察するには、 Qt のキャッシュされたテーブルの例を変更してみてください。ただし、プッシュ ボタンから呼び出されたスロットでは、問題なく行が追加されます。もちろん、編集不可。
だから私の質問は:
- なぜこうなった?QSqlTableModel のソース コードを十分に確認しましたが、それを理解するには、QSqlRecord、QSqlQuery、QAbstractItemModel なども理解する必要があります。
- 編集できない行を回避するために、Qt::ItemIsEditable と Qt::ItemIsenabled を無効にするために QSqlTableModel オーバーライド flags() をサブクラス化しました。私は何を間違えましたか?
- 私は最終的に QTableView をサブクラス化してこの動作を取得することを知っているので、誰かが私へのポインタ、おそらく私が読むことができるプロジェクトのソースを持っているとありがたいです。
ありがとうございました、
エヴァン
qt - 新しいレコードをQSqlTableModelに挿入する際のデフォルトのDB値
DBのデフォルト値に関してQSqlTableModelに新しいレコードを挿入する方法は? pTableModel->insertRecord(0, pTableModel->record(0));
UPD: or pTableModel->insertRecord(0, pTableModel->record());
or pTableModel->insertRecord(QSqlDatabase::database().record("tableName"));
orを呼び出そうとしていますpTableModel->insertRow(0);
結果は同じで、DB のデフォルト値ではなく、すべてのフィールドが NULL です。
python - PyQt4 QTableViewで選択されたアイテムのテキストがワンクリックで遅れる
を使用して のQTableView
内容を表示QSqlTableModel
し、 を使用しQSortFilterProxyModel
てレコードをフィルタリングしています。次のコードでは、ユーザーがセルをクリックしたときに選択したテキストを表示することができました (フィルターが適用されているかどうかに関係なく)。ただし、常に 1 クリック遅れており、開始後の最初のクリックで が発生IndexError: pop from empty list
し、同じ行内で新しい列が選択されても何も起こりません。
テーブルを初期化した後にインデックスを選択しようとしましたが、何もしなかったようです。私は次に何を試すべきかについてのアイデアがありませんか?
c++ - QSqlTableModel を使用した QTableView のデータ入力
QSqlTableModelを使用してSQLiteテーブルのデータを表示する基本的なQTableViewがあります。
データ入力は、フィールド データを表す多数のウィジェットと [追加] ボタンを持つ親ダイアログによって行われます。データの削除は、[選択した行を削除] ボタンを使用して行います。
すべてが非常に機能的ですが、信じられないほど不格好で、Better Way を試してみたいと思います。
理想的には、ユーザーが簡単にデータの入力を開始できるビューに空の行が必要です。各行の終わりには、その特定の行を削除するためのボタンがあります (垂直ヘッダーに似ていますが、行番号の代わりにプッシュ ボタンがあります)。
これは、QTableView をサブクラス化することで達成できると思いますが、すべてを再描画する必要があるという考えは少し気が遠くなります...
おそらくデリゲート(確かに私が以前に使用したことのないもの)または私が見落としていた別のより簡単な方法を使用して、これをどのように行うことができるかについて誰かアドバイスがありますか??
pyqt - setOrientation が Vertical の場合、QDataWidgetMapper が PyQt の QSqlTableModel で正しく動作しない
奇妙な問題があります。次のコードは、2 つのウィジェットを SQLITE テーブルの最初の 2 行 ("simpletable") にのみマップする場合に完全に機能します。ウィジェットは起動時に入力され、ウィジェットを編集してボタンをクリックし、mapper.submit() を呼び出すと、テーブルが正しく更新されます。
ただし、3 番目のウィジェットをマップするとすぐに、起動時にウィジェットの値が適切に入力されますが、mapper.submit() を呼び出すとエラーが発生し、マッピングが機能しなくなります。
「simpletable」は、テキスト値を持つ単純な行と列のセットです。
向きが水平に設定されている場合、列は適切にマッピングされ、すべて正常に機能します。問題が何であるかについての提案はありますか?
qt4 - QSqlTableModel/ QTableView xml へのクエリの解析
これはこのフォーラムへの私の最初の投稿であり、私が解決を求めている問題が明確に説明されていることを願っています。DBのテーブルを表示するためにQSqlTableModelとQSqlTableViewを使用しています。キャッシュされたテーブル モデルは私が探していたものです。そのため、QSqlTableModel を選択しました (他のモデルはありますか?)。submitAll() を実行したら、キャッシュされたすべてのクエリを xml に解析する必要があります。編集戦略として OnManualSubmit を選択しました。QSqlTableModel のサブクラスを作成し、insertRowInTable/updateRowInTable/deleteRowFromTable をオーバーロードしようとしましたが、キャッシュはプライベート クラスへの d ポインターによってアクセスされ、キャッシュされた準備済みステートメントを取得して xml に解析する別の方法が見つかりません。 . 私が考えたこの解決策は不可能ですか?
返信をお待ちしております。
sql - Sqlite クエリに基づいて QTableView 行を選択するには?
私のアプリケーションは 2 つのウィンドウ アプリケーションで、そのうちの 1 つは位置を変更し、SQL DB に追加されたポイントをマークでき、もう 1 つはマークされたポイントを表示できます。
私は を持ってQTableView
いQSqlTableModel
ます。モデルはt_point
、次の列を持つ名前のテーブルに接続されています。
- ID 整数 PRIMARY KEY
- 位置整数
私がやりたいことは次のとおりです。一方のウィンドウでテーブルをクリックすると、もう一方のウィンドウの位置に自動的に移動します。(これは行われます)
QTableView
位置を移動し、最も近い位置のアイテムを自動的に選択します。これが取引です。私はそれを迅速かつきれいに行いたいです。QSqlQuery
したがって、次のクエリでa を使用して最も近いアイテムを取得します。
そして、ポイントからの距離でそれらを並べ替えますquery.next()
.2つの値を使用して取得します. インデックスと位置。
QTableView
では、この値に合わせて行を選択するにはどうすればよいですか?
列が無いので使えselectRow( int row ) from QTableView
ません、鍵と位置を取得しました...
私が得た唯一の解決策は、モデル上の自分の ID または位置を確認することでした。しかし、それはひどいです。
qt - 編集時に QListView が選択を失う
QSQLTableModel からデータを取得する QListView があります。
ユーザーが [追加] ボタンをクリックすると、新しいアイテムを追加して編集用に開きます。
ただし、ユーザーが新しい値の編集を完了すると、listView の選択は失われます。QListView または QSQLTableModel で、選択を「復元」するために編集が終了したときに処理するシグナルが見つかりません。
選択が保持されていることを確認する方法はありますか?
submit - QSqlTableModelで1行だけを送信するにはどうすればよいですか?
OnManualSubmit編集戦略でQSqlTableModelを使用します。
revertRow()メソッドを使用して、一部の行の変更を元に戻す可能性があります。
しかし、どうすれば1行のテーブルのみを送信できますか?私はsubmitAll()メソッドしか持っていません。
insertRowIntoTable()を使用することもできますが、保護されているため、QSqlTableModelを継承したくありません。