我开始学习Qt4模型/视图编程,我有一个初学者的问题。在
我有一个简单的应用程序,在QTableView
中显示sqlite表:
class Model(QtSql.QSqlTableModel):
def __init__(self, parent=None):
super(Model, self).__init__(parent)
self.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
self.setTable("test")
self.select()
class App(QtGui.QMainWindow):
def __init__(self, model):
QtGui.QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.tableView.setModel(model)
if __name__ == "__main__":
myDb = QtSql.QSqlDatabase.addDatabase("QSQLITE")
myDb.setDatabaseName("test.db")
if not myDb.open():
print 'FIXME'
model = Model()
app = QtGui.QApplication(sys.argv)
window = App(model)
window.show()
sys.exit(app.exec_())
以下是数据库的外观:
^{pr2}$所以我得到的东西是:
+---+---+-----+
| a | b | c |
+---+---+-----+
| 1 | 2 | xxx |
+---+---+-----+
| 6 | 7 | yyy |
+---+---+-----+
是否可以将Model
修改为在QTableView
中具有类似于虚拟列的内容?例如:
+---+---+-----+-----+
| a | b | sum | c |
+---+---+-----+-----+
| 1 | 2 | 3 | xxx |
+---+---+-----+-----+
| 6 | 7 | 13 | yyy |
+---+---+-----+-----+
或者我应该用别的方法做?在
是的,你可以的。虽然@BrtH's answer是相关的,但是模型很复杂,很容易丢失。所以我认为一个更典型的例子会更好。在
就个人而言,我会使用从
QAbstractProxyModel
派生的代理模型。但是,在您的例子中,重新实现QSqlTableModel
也是可行的。下面是您的目标实现。请注意,了解Model/View methodology的基本知识是非常重要的,这样才能理解每个方法的作用。在你看过QSqlQueryModel了吗? 它允许显示任何SQL查询的结果。示例代码:
但请记住:
这是很有可能的。下面是我自己的一些代码的示例,为您的数据修改。在
这是一个QTreeView的模型,但我认为您可以很容易地适应它。
有关这些方法和模型的更多信息,请参见http://srinikom.github.com/pyside-docs/PySide/QtCore/QAbstractItemModel.html。在
相关问题 更多 >
编程相关推荐