python tableview没有数据显示_无法在QML TableVi中显示QSqlQueryModel中的数据vi

我试图在QML的TableView组件的帮助下,在表中显示MySQL数据库中的数据。在

最初,我尝试从QSqlQuery对象生成一个QSqlQueryModel对象,并将其作为属性传递给QML上下文。但我从Qt documentation开始了解到,我必须实现roleNames()来提供到TableView的列到角色映射,所以我将{}子类化如下import sys

from PyQt5.QtCore import QUrl, Qt

from PyQt5.QtGui import QGuiApplication

from PyQt5.QtQuick import QQuickView

from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlQueryModel

class QtTabModel(QSqlQueryModel):

def __init__(self):

super(QtTabModel, self).__init__()

@staticmethod

def roleNames():

roles = {

Qt.UserRole + 1 : "id",

Qt.UserRole + 2 : "name"

}

return roles

app = QGuiApplication(sys.argv)

view = QQuickView()

db = QSqlDatabase.addDatabase("QMYSQL")

db.setHostName("localhost")

db.setDatabaseName("qtdb")

db.setUserName("abc")

db.setPassword("xyz")

qry = QSqlQuery()

if db.open():

qry = db.exec("SELECT id, name FROM qttab")

tabmodel = QtTabModel()

tabmodel.setQuery(qry)

ctx = view.rootContext()

ctx.setContextProperty("tabmodel", tabmodel)

view.setSource(QUrl.fromLocalFile("sqltabletest.qml"))

view.show()

app.exec()

我的QML是

^{pr2}$

但它什么也没显示,只是一个空白的窗口

我可以看到我的QSqlQuery正在工作,因为我可以使用value(n)方法从数据库打印数据。我还检查了making rolenames()成员函数,但最终结果是一样的。在def roleNames(self):

roles = {

Qt.UserRole + 1 : "id",

Qt.UserRole + 2 : "name"

}

return roles

更新:

QSqlQueryModel使用widget类,我用QTableViewwidget测试过。但我需要让它和QML一起工作。在import sys

from PyQt5.QtCore import Qt

from PyQt5.QtWidgets import QApplication, QTableView

from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlQueryModel

app = QApplication(sys.argv)

db = QSqlDatabase.addDatabase("QMYSQL")

db.setHostName("localhost")

db.setDatabaseName("qtdb")

db.setUserName("abc")

db.setPassword("xyz")

qry = QSqlQuery()

if db.open():

qry = db.exec("SELECT id, name FROM qttab")

tabmodel = QSqlQueryModel()

tabmodel.setQuery(qry)

tabmodel.setHeaderData(0, Qt.Horizontal, "ID")

tabmodel.setHeaderData(1, Qt.Horizontal, "Name")

tabview = QTableView()

tabview.setModel(tabmodel)

tabview.show()

db.close()

app.exec()

有谁能帮我解决这个问题吗?提前谢谢。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值