从QListView中获取选定项的数据
我用QSqlTableModel填充了一个QListView。
projectModel = QSqlTableModel()
projectModel.setTable("project")
projectModel.select()
projectView = QListView()
projectView.setModel(projectModel)
projectView.setModelColumn(1)
- 稍微修改一下我的表述。 -
假设我的QSqlTableModel有3列。第(0)列是id,第(1)列是名字,第(2)列是颜色。
在我的QListView中,我只显示第1列,也就是名字。然后我选中了一个项目。请问我怎么才能获取到这个项目的id和颜色呢?
抱歉,我还是个初学者。太初学了,读文档都看不懂 :(
3 个回答
0
你可以使用模型的 selectedIndexes()
方法来获取被选中项目的索引,方法类似于下面这样:
idx = self.projectView.selectionModel().selectedRows()
接着,你可以通过循环这些索引(idx),来获取你需要的值,方法如下:
for rec in idx:
entry = rec.row()
val = self.projectModel.record(entry).field(x).value()
这里的 x
是你想要获取的列的编号。
现在 val
是一个 QVariant 类型,你可以对它进行进一步的处理。
3
在我的QListView中,我只显示第一列,也就是名字。然后我选中了一个项目。请问我怎么才能获取到这个项目的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_()
6
虽然我不太明白你具体想做什么,但我可以给你解答你问的两个问题。
比如说,我们有一个名为 "sqlitedb.rdb" 的sqlite3数据库,还有一个表叫 "info",
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_()
你可以循环遍历查询结果,获取数据。