有一个 QSqlTableModel 的示例(对于QSqlQueryModel ,代码几乎相同):
from PyQt5.QtWidgets import QApplication, QTableView
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel, QSqlQuery
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('database.sqlite')
if not db.open():
raise Exception(db.lastError().text())
TABLE = 'word2emoji'
query = QSqlQuery()
query.exec(f'SELECT COUNT(*) FROM {TABLE}')
query.next()
TABLE_ROW_COUNT = query.value(0)
def update_window_title():
mw.setWindowTitle(f'{model.rowCount()} / {TABLE_ROW_COUNT}')
app = QApplication([])
model = QSqlTableModel()
model.rowsInserted.connect(update_window_title)
model.setTable(TABLE)
model.select()
mw = QTableView()
mw.setEditTriggers(QTableView.NoEditTriggers)
mw.setModel(model)
mw.resize(600, 480)
mw.show()
update_window_title()
app.exec()
启动时,从数据库中读取 256 条记录,向下滚动时,会加载新部分
我想控制记录的数量以便显示更少,例如,100
答案是不。
这个值是硬编码的(见
QSQL_PREFETCHcqsqlquerymodel.cpp),只能通过重建来改变Qt,或者通过制作你自己的模型并在其中重新定义fetchMore中的逻辑。