我如何按字母顺序对 QTableView 中的项目进行排序
How can i sort items in a QTableView in alphabetic order
我想按字母顺序对 QTableView 中的项目进行排序。我已经在互联网上进行了搜索,但全部都是静脉,我发现的那些仅限于按升序或降序排序并使用抽象模型,但在我的情况下,这些项目是从数据库中获取的。
我什至没有关于它的明确代码,因为我没有找到任何相关的解决方案。我所拥有的只是这段代码,当 运行
时会出错
database = QtSql.QSqlDatabase().addDatabase('QSQLITE')
database.setDatabaseName('database.db')
database.open()
self.table_model1 = QtSql.QSqlQueryModel()
self.table_model1.setQuery("SELECT * FROM Individuals ")
self.tableView1.setModel(self.table_model1)
self.table_model1.setHeaderData(0, QtCore.Qt.Horizontal, "Name")
self.table_model1.setHeaderData(1, QtCore.Qt.Horizontal, "Tel No.")
self.table_model1.setHeaderData(2, QtCore.Qt.Horizontal, "Email")
self.tableView1.horizontalHeader().setVisible(True)
self.tableView1.setSortingEnabled(True)
self.tableView1.horizontalHeader().sortIndicatorChanged.connect(self.sort_table1)
def sort_table1(self):
self.tableView1.sortByColumn(0, QtCore.Qt.OrderedAlphaDither)
如果你想对数据进行排序,你应该覆盖模型的 sort()
方法或使用排序数据的代理,在这种情况下我将使用 QSortFilterProxyModel
:
示例:
def createConnection():
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName(':memory:')
if not db.open():
print( "Cannot open database",
"Unable to establish a database connection.\n"
"This example needs SQLite support. Please read the Qt SQL "
"driver documentation for information how to build it.\n\n"
"Click Cancel to exit.")
return False
query = QtSql.QSqlQuery()
query.exec_("create table person(id int primary key, "
"firstname varchar(20), lastname varchar(20))")
query.exec_("insert into person values(101, 'Danny', 'Young')")
query.exec_("insert into person values(102, 'Christine', 'Holand')")
query.exec_("insert into person values(103, 'Lars', 'Gordon')")
query.exec_("insert into person values(104, 'Roberto', 'Robitaille')")
query.exec_("insert into person values(105, 'Maria', 'Papadopoulos')")
return True
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
if not createConnection():
sys.exit(1)
table = QtWidgets.QTableView()
table.setSortingEnabled(True)
model = QtSql.QSqlQueryModel()
model.setQuery("select * from person")
proxy = QtCore.QSortFilterProxyModel()
proxy.setSourceModel(model)
table.setModel(proxy)
table.show()
sys.exit(app.exec_())
我想按字母顺序对 QTableView 中的项目进行排序。我已经在互联网上进行了搜索,但全部都是静脉,我发现的那些仅限于按升序或降序排序并使用抽象模型,但在我的情况下,这些项目是从数据库中获取的。 我什至没有关于它的明确代码,因为我没有找到任何相关的解决方案。我所拥有的只是这段代码,当 运行
时会出错database = QtSql.QSqlDatabase().addDatabase('QSQLITE')
database.setDatabaseName('database.db')
database.open()
self.table_model1 = QtSql.QSqlQueryModel()
self.table_model1.setQuery("SELECT * FROM Individuals ")
self.tableView1.setModel(self.table_model1)
self.table_model1.setHeaderData(0, QtCore.Qt.Horizontal, "Name")
self.table_model1.setHeaderData(1, QtCore.Qt.Horizontal, "Tel No.")
self.table_model1.setHeaderData(2, QtCore.Qt.Horizontal, "Email")
self.tableView1.horizontalHeader().setVisible(True)
self.tableView1.setSortingEnabled(True)
self.tableView1.horizontalHeader().sortIndicatorChanged.connect(self.sort_table1)
def sort_table1(self):
self.tableView1.sortByColumn(0, QtCore.Qt.OrderedAlphaDither)
如果你想对数据进行排序,你应该覆盖模型的 sort()
方法或使用排序数据的代理,在这种情况下我将使用 QSortFilterProxyModel
:
示例:
def createConnection():
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName(':memory:')
if not db.open():
print( "Cannot open database",
"Unable to establish a database connection.\n"
"This example needs SQLite support. Please read the Qt SQL "
"driver documentation for information how to build it.\n\n"
"Click Cancel to exit.")
return False
query = QtSql.QSqlQuery()
query.exec_("create table person(id int primary key, "
"firstname varchar(20), lastname varchar(20))")
query.exec_("insert into person values(101, 'Danny', 'Young')")
query.exec_("insert into person values(102, 'Christine', 'Holand')")
query.exec_("insert into person values(103, 'Lars', 'Gordon')")
query.exec_("insert into person values(104, 'Roberto', 'Robitaille')")
query.exec_("insert into person values(105, 'Maria', 'Papadopoulos')")
return True
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
if not createConnection():
sys.exit(1)
table = QtWidgets.QTableView()
table.setSortingEnabled(True)
model = QtSql.QSqlQueryModel()
model.setQuery("select * from person")
proxy = QtCore.QSortFilterProxyModel()
proxy.setSourceModel(model)
table.setModel(proxy)
table.show()
sys.exit(app.exec_())