Получение данных из выбранного элемента в QListView - PullRequest
2 голосов
/ 19 января 2012

Я заполняю QListView с помощью QSqlTableModel.

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

  projectView = QListView()
  projectView.setModel(projectModel)
  projectView.setModelColumn(1)
  • немного измени мою формулировку. -

Скажите, что у моей QSqlTableModel есть 3 столбца. (0) для идентификатора, (1) для имени, (2) для цвета, например.

В моем QListView я отображаю столбец 1, поэтому только имена. Тогда я выбрал 1 предмет. Как я могу получить идентификатор и цвет этого элемента?

Извините, я очень новичок в этом. Слишком начинающий, я не могу разобраться, читая документацию: (

Ответы [ 3 ]

6 голосов
/ 19 января 2012

Хотя я не до конца понял, что вы пытаетесь сделать, я показываю вам ответ на два ваших вопроса.

Например, у нас есть база данных 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');

Теперь,

Я хочу только отобразить идентификатор и имя (столбец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_()

, вы можете циклически проходить запрос и получать доступ к данным.

3 голосов
/ 20 января 2012

В моем QListView я отображаю столбец 1, поэтому только имена.Тогда я выбрал 1 предмет.Как я могу получить идентификатор и цвет этого элемента?

Пожалуйста, проверьте следующий пример.Вы можете добавить функцию в «щелкнувший» слот 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 голосов
/ 19 января 2012

Вы можете использовать метод 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, и вы можете уточнить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...