【发布时间】:2017-12-28 00:10:09
【问题描述】:
所以我使用 QDataWidgetMapper 将值从 QSqlQueryModel 映射到我界面中的小部件。这很好用,每次更新或刷新我的模型时,小部件也会更新......太好了!
但是假设我有一个 QLabel……并且这个 QLabel 已映射到模型中名为“City”的字段,并且 QLabel 显示的文本显示为“LONDON”。有没有办法格式化这个文本,以便它显示为“伦敦”?同时保持映射关系,不改变QSqlQueryModel查询的数据库?
谢谢!
编辑 - 这是我目前所拥有的代码的简化示例:
import sys
from PyQt4 import QtCore, QtGui
class DemoModel(QtCore.QAbstractTableModel):
def __init__(self):
super(DemoModel, self).__init__()
self.visibleColumns = ['city', 'country']
self.items = [
{'city': 'LONDON', 'country': 'England'},
{'city': 'GLASGOW', 'country': 'Scotland'},
{'city': 'CARDIF', 'country': 'Wales'},
]
def rowCount(self, parent=QtCore.QModelIndex()):
return len(self.items)
def columnCount(self, parent=QtCore.QModelIndex()):
return len(self.visibleColumns)
def data(self, index, role=QtCore.Qt.DisplayRole):
if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.ToolTipRole:
colName = self.visibleColumns[index.column()]
return self.items[index.row()].get(colName, '')
def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):
if role == QtCore.Qt.DisplayRole and orientation == QtCore.Qt.Horizontal:
return self.visibleColumns[section]
class TestWindow(QtGui.QWidget):
def __init__(self):
super(TestWindow, self).__init__()
self.resize(100, 100)
layout = QtGui.QVBoxLayout(self)
demoLabel = QtGui.QLabel()
layout.addWidget(demoLabel)
mapper.addMapping(demoLabel, 0, "text")
model = DemoModel()
mapper = QtGui.QDataWidgetMapper()
mapper.setModel(model)
app = QtGui.QApplication(sys.argv)
demo = TestWindow()
demo.show()
sys.exit(app.exec_())
【问题讨论】:
-
请出示您的代码
-
您的示例仅显示了一个空小部件。
-
@eyllanesc 是的,我自己对此有点困惑。当我在 QTableView 中查看模型时,该模型似乎可以工作......并且据我所知,映射设置正确。很奇怪!这个例子和我的主要代码的主要区别在于它是从 QSqlQueryModel 映射的。有什么我想念的吗?
-
放上QSqlQueryModel和QTableView,我想测试一下给你一些选择,但如果我能重现它,我将无法帮助你。
标签: python qt pyqt pyqt4 pyside