私はPysideを使用して、sqliteデータベースから描画するコンボボックスを作成しています。ユーザーは既存のアイテムの1つを選択したり、新しいアイテムを追加することができます。ユーザーはアイテム名(「param」と呼ばれます)を表示しますが、データベースからアイテムIDにアクセスする必要があります。したがって、2つのステップがあります:編集可能なQComboBoxをデータベースにリンクする方法
読み込み項目:データベースから読み込むことができますが、背後にあるアイテムIDにアクセスする際に項目名を表示することはできません。
項目を追加する:コンボボックスの変更を検出してから、SQL挿入コマンドを使用する必要がありますか、それともモデルがこれを処理しますか?
このコードは、データベースから読み取りますが正しく表示されない:
param_model = QSqlQueryModel()
param_model.setQuery("select id, param from partable order by param")
param_model.setHeaderData(0, Qt.Horizontal,"id")
param_model.setHeaderData(1, Qt.Horizontal,"param")
param_view = QTableView()
param_view.setColumnHidden(0,True)
self.paramfield = QComboBox()
self.paramfield.adjustSize()
self.paramfield.setEditable(True)
self.paramfield.setModel(param_model)
self.paramfield.setView(param_view)
この詳細な説明と例はありがとうございます。私は自分のコードを調整し、それがうまくいくかどうかを報告します。 – davideps
あなたのコードは美しく動作します。あなたの提案に基づいて自分のコードを調整すると、新しいコンボボックスのエントリがデータベースにNULL IDで追加され、このエラーが表示されます: "handleComboEdit Qt.EditRole、ID、1、Qt.MatchExactly)[0] IndexError:list index範囲外です。 "しかし、 "ID = model.query()。lastInsertId()"の結果は整数です。したがって、まだ動作していない可能性が高いのはmodel.matchです。私はまもなく報告します... – davideps
実際、問題は、私が間違ってsqliteテーブルを定義していたようだ。 "id INT PRIMARY KEY"は正常に動作しないように見える表になります。 "id INTEGER PRIMARY KEY"は正しく動作します。ありがとうございました! – davideps