2012-01-19 33 views
2

QListViewにQSqlTableModelを設定します。QListViewで選択した項目からデータを取得する

projectModel = QSqlTableModel() 
    projectModel.setTable("project") 
    projectModel.select() 

    projectView = QListView() 
    projectView.setModel(projectModel) 
    projectView.setModelColumn(1) 
  • 私の文言ビットを編集します。 -

私のQSqlTableModelには3つの列があります。 (id)は(0)、名前は(1)、色は(2)などです。

私のQListViewでは、列1を表示していますので、名前だけです。それから私は1つの項目を選択しました。そのアイテムのIDと色を取得するにはどうすればよいですか?

申し訳ありません申し訳ありませんが、私は非常に初心者です。あまりにも私は読書のドキュメンテーションを、物事を把握することはできません:(

答えて

5

私は完全にあなたがやろうとしているものを理解していなかったけど初心者、私はあなたの2つの質問の答えを示しています。

たとえば、私たちはsqlite3のデータベース "sqlitedb.rdb" とテーブル名 "情報" を持って、

CREATE TABLE info (
id integer PRIMARY KEY AUTOINCREMENT DEFAULT NULL, 
name TEXT(20) DEFAULT NULL, 
country TEXT(20) DEFAULT NULL, 
age integer) 

といくつかのデータを持っている、

INSERT INTO info (name,country,age) VALUES ('Leroy Hale','San Marino','46'); 
INSERT INTO info (name,country,age) VALUES ('William Coleman','Namibia','50'); 
INSERT INTO info (name,country,age) VALUES ('Phelan Waller','Belgium','43'); 
INSERT INTO info (name,country,age) VALUES ('Kato Martin','Virgin Islands, British','21'); 
INSERT INTO info (name,country,age) VALUES ('Jameson Mccoy','United Arab Emirates','45'); 
INSERT INTO info (name,country,age) VALUES ('Fulton Reeves','Belarus','34'); 
INSERT INTO info (name,country,age) VALUES ('Calvin Love','Morocco','28'); 
INSERT INTO info (name,country,age) VALUES ('Peter Solis','Bhutan','31'); 
INSERT INTO info (name,country,age) VALUES ('Connor Stephenson','Dominican Republic','26'); 
INSERT INTO info (name,country,age) VALUES ('Aristotle Smith','Chad','45'); 

私はIDと名前(列0と1)を表示したいだけです。

は、このことができますを行うには

from PyQt4.QtSql import QSqlQueryModel,QSqlDatabase,QSqlQuery 
from PyQt4.QtGui import QTableView,QApplication 
import sys 

app = QApplication(sys.argv) 

db = QSqlDatabase.addDatabase("QSQLITE") 
db.setDatabaseName("sqlitedb.rdb") 
db.open() 

projectModel = QSqlQueryModel() 
projectModel.setQuery("select name,age from info",db) 

projectView = QTableView() 
projectView.setModel(projectModel) 

projectView.show() 
app.exec_() 

あなたは、クエリを使用して表示したいどのフィールド/列を設定することができます。私は、私が選択した項目の異なる列から情報を取得する方法

と、

あなたは、クエリの結果をナビゲートし、データ、例を持つことができ、

from PyQt4.QtSql import QSqlDatabase,QSqlQuery 
from PyQt4.QtCore import QCoreApplication 
import sys 

app = QCoreApplication(sys.argv) 

db = QSqlDatabase.addDatabase("QSQLITE") 
db.setDatabaseName("sqlitedb.rdb") 
db.open() 

query = QSqlQuery() 
query.exec_("select * from info") 
while (query.next()): 
    id = query.value(0).toInt() 
    name = query.value(1).toString() 
    country = query.value(2).toString() 
    age = query.value(3).toInt() 

    print "name = %s \ncountry = %s" % (name,country) 

app.exec_() 

することができますクエリをループし、データへのアクセスを取得します。

+0

ありがとうございました。本当にsetQueryの例が分かりました。この特定の質問については、選択した項目だけのデータを取得する方法を知りたいと思います。私は自分の質問を編集しました。私の言葉がはっきりしないと申し訳ありません:) – Panupat

+0

私の間違いは、QListViewの選択された行を '選択'することで意味しますが、私はあなたがmysql SELECT文を意味すると思った。私はQListViewの選択のための以下の別の答えを追加しました:) – Sarim

0

は、あなたはあなたが必要な値を得ることができ、

idx = self.projectView.selectionModel().selectedRows() 

はその後、IDXにループのようなものを使用して、選択した項目のインデックスを取得するには、モデルのselectedIndexes()方法を使用することができます

for rec in idx: 
    entry = rec.row() 
    val = self.projectModel.record(entry).field(x).value() 

x再検索したい列の番号を入力してください

valは現在QVariantになっています。さらに詳しく説明する。

+0

感謝Gianluca。しかし、私のidxは空リストとなっています。 – Panupat

3

私のQListViewでは、私は列1を表示しているので、名前だけです。その後、私は を1つ選択しました。そのアイテムのIDと色を取得するにはどうすればよいですか?

次の例を確認してください。 QListViewの「クリックされた」スロットに関数を追加することができます。次に、どの行が選択されているかを取得します。

from PyQt4.QtSql import QSqlDatabase,QSqlTableModel 
from PyQt4.QtGui import QListView,QApplication 
import sys 

def listclicked(index): 
    row = index.row() 
    print "id = %s" % projectModel.record(row).field(0).value().toString() 
    print "country = %s" % projectModel.record(row).field(2).value().toString() 

app = QApplication(sys.argv) 

db = QSqlDatabase.addDatabase("QSQLITE") 
db.setDatabaseName("sqlitedb.rdb") 
db.open() 

projectModel = QSqlTableModel() 
projectModel.setTable("info") 
projectModel.select() 

projectView = QListView() 
projectView.setModel(projectModel) 
projectView.setModelColumn(1) 
projectView.clicked.connect(listclicked) 
projectView.show() 

app.exec_() 
+0

私はこの答えを探していました。あなたはその日の私の救い主です。非常によく説明! – zeFree