如何从使用QSqlTableModel填充的QComboBox中获取选定项数据

0 投票
1 回答
1158 浏览
提问于 2025-04-18 03:31

我有一个基本的下拉框,它的数据是从一个sqlite3数据库表里获取的:

self.langModel = QSqlTableModel(self)
self.langModel.setTable("languages")
self.langModel.setSort(self.langModel.fieldIndex("label"), Qt.AscendingOrder)
self.langModel.select()

...

self.comboLangs = QComboBox()
self.comboLangs.setModel(self.langModel)
self.comboLangs.setModelColumn(self.langModel.fieldIndex("label"))
self.layout.addRow("Language", self.comboLangs)

...

self.btnAdd = QPushButton("Add")
self.btnAdd.clicked.connect(self.addLoc)
self.btnLayout.addWidget(self.btnAdd)

...

def addLoc(self):
    pprint(vars(self.langModel.data(self.langModel.index(self.comboLangs.currentIndex(), self.langModel.fieldIndex("iso")))))

这是表的结构:

CREATE TABLE languages ( 
    id    INTEGER PRIMARY KEY NOT NULL,
    iso   TEXT    NOT NULL,
    label TEXT    NOT NULL 
);

现在我得到的只是一个空的字典 {}。我该如何从QSqlTableModel中获取当前选中项的数据对象呢?

1 个回答

4

好的,我搞明白了(我希望PyQt的参考文档能更具体一点,告诉我该怎么做)。总之,要获取模型数据,我需要把QVariant对象转换成Python对象(用toPyObject())或者转换成字符串(用toString())。

print self.langModel.data(self.langModel.index(self.comboLangs.currentIndex(), self.langModel.fieldIndex("iso"))).toString()

这样我就得到了我需要的数据。

撰写回答