QAbstractItemModel 与QTableView搭配使用
时间: 2023-08-08 09:05:45 浏览: 114
QSqlQueryModel+QTableView
5星 · 资源好评率100%
QAbstractItemModel 是 Qt 框架中用于实现数据模型的抽象基类,它定义了一些纯虚函数,派生类需要实现这些函数来提供数据、索引、父子关系等信息。QTableView 是 Qt 框架中的一个表格控件,可以用于显示二维表格数据。
QTableView 需要一个 QAbstractItemModel 类型的数据模型来提供数据,因此一般的做法是通过继承 QAbstractItemModel 来实现自己的数据模型,然后将其与 QTableView 搭配使用。具体步骤如下:
1. 创建一个继承自 QAbstractItemModel 的类,实现其纯虚函数,提供数据、索引、父子关系等信息。
2. 在窗口中创建一个 QTableView 控件,并将其设置为自动填充整个窗口。
3. 创建自定义的数据模型实例,并将其设置给 QTableView 控件使用。
4. 将 QTableView 控件添加到窗口中,显示数据。
下面是一个简单的例子,演示了如何使用 QAbstractItemModel 和 QTableView 显示一个二维表格数据:
``` python
from PyQt5.QtCore import Qt, QAbstractTableModel, QModelIndex
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView
class MyModel(QAbstractTableModel):
def __init__(self, data):
super().__init__()
self._data = data
def rowCount(self, parent=QModelIndex()):
return len(self._data)
def columnCount(self, parent=QModelIndex()):
return len(self._data[0])
def data(self, index, role=Qt.DisplayRole):
if role == Qt.DisplayRole:
return self._data[index.row()][index.column()]
return None
class MyWindow(QMainWindow):
def __init__(self, data):
super().__init__()
self.setWindowTitle("My Window")
self.setGeometry(100, 100, 400, 300)
self.table_view = QTableView(self)
self.table_model = MyModel(data)
self.table_view.setModel(self.table_model)
self.setCentralWidget(self.table_view)
if __name__ == '__main__':
app = QApplication([])
data = [
["A1", "B1", "C1"],
["A2", "B2", "C2"],
["A3", "B3", "C3"]
]
window = MyWindow(data)
window.show()
app.exec_()
```
在这个例子中,我们创建了一个 MyModel 类来实现自己的数据模型,它继承自 QAbstractTableModel。在 MyModel 类中,我们实现了 rowCount、columnCount、data 等纯虚函数,提供了数据、行数和列数等信息。
在 MyWindow 类中,我们创建了一个 QTableView 控件,并将其设置为窗口的中心控件。然后,我们创建了自定义的数据模型实例并将其设置给 QTableView 控件使用。
最后,我们将 QTableView 控件添加到窗口中,显示数据。运行程序,可以看到一个简单的二维表格数据被显示出来了。
阅读全文