pyqt QListView model 的dataChanged三个参数的信号槽示例代码
时间: 2024-05-06 07:17:45 浏览: 178
以下是一个使用PyQt5中QListView模型的示例代码,演示如何在模型中更改数据时发射dataChanged信号:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QListView
from PyQt5.QtCore import QAbstractListModel, QModelIndex
import sys
class MyListModel(QAbstractListModel):
def __init__(self, data=None):
super().__init__()
self._data = data or []
def data(self, index, role=Qt.DisplayRole):
if role == Qt.DisplayRole:
return self._data[index.row()]
def rowCount(self, parent=QModelIndex()):
return len(self._data)
def setData(self, index, value, role=Qt.EditRole):
if role == Qt.EditRole:
self._data[index.row()] = value
self.dataChanged.emit(index, index)
return True
return False
class MainWindow(QMainWindow):
def __init__(self, data=None):
super().__init__()
self.list_view = QListView(self)
self.setCentralWidget(self.list_view)
self.model = MyListModel(data)
self.list_view.setModel(self.model)
self.model.dataChanged.connect(self.on_data_changed)
def on_data_changed(self, top_left, bottom_right):
print("Data changed from index {} to {}".format(top_left.row(), bottom_right.row()))
if __name__ == "__main__":
app = QApplication(sys.argv)
data = ["Item 1", "Item 2", "Item 3"]
window = MainWindow(data)
window.show()
sys.exit(app.exec_())
```
在此示例中,我们创建了一个自定义的QAbstractListModel类,其中包含setData方法,该方法更改模型中的数据并发射dataChanged信号。MainWindow类包含一个QListView和MyListModel实例。我们连接了MyListModel的dataChanged信号到MainWindow的on_data_changed槽函数,以便在模型数据更改时得到通知。
当我们在QListView中双击某个项目时,编辑模式将启动,并调用MyListModel的setData方法。此方法将更改模型中的数据,并发射dataChanged信号,通知MainWindow上的on_data_changed槽函数。在槽函数中,我们打印输出更改的行范围。
阅读全文