qsqlquerymodel添加checkbox
时间: 2023-12-04 08:04:31 浏览: 148
datagrid添加checkbox
要在 QSQLQueryModel 中添加一个 checkbox,可以通过在 QSQLQueryModel 的数据中添加一个布尔值字段来实现。然后,您可以使用 QTableView 和 QStandardItemModel 一起使用,以显示一个带有 checkbox 的视图。以下是一个示例代码:
```python
from PyQt5.QtCore import Qt, QAbstractTableModel
class MyModel(QAbstractTableModel):
def __init__(self, data):
QAbstractTableModel.__init__(self)
self._data = data
def rowCount(self, parent=None):
return len(self._data)
def columnCount(self, parent=None):
return len(self._data[0])
def data(self, index, role=Qt.DisplayRole):
if role == Qt.DisplayRole:
return str(self._data[index.row()][index.column()])
elif role == Qt.CheckStateRole:
if index.column() == 0:
return Qt.Checked if self._data[index.row()][0] else Qt.Unchecked
def setData(self, index, value, role):
if role == Qt.CheckStateRole and index.column() == 0:
self._data[index.row()][0] = value
self.dataChanged.emit(index, index)
return True
return False
def headerData(self, section, orientation, role=Qt.DisplayRole):
if role != Qt.DisplayRole:
return None
if orientation == Qt.Horizontal:
return "Column %d" % section
else:
return "Row %d" % section
```
该模型将数据作为一个包含布尔值的列表进行存储。然后,在 CheckStateRole 中,我们检查该行中的第一列是否应该被检查。在 setData 中,我们更新数据并发出数据更改信号。最后,我们还覆盖了 headerData 方法以提供表头的标签。
接下来,我们可以将模型与 QTableView 一起使用,以显示具有 checkbox 的视图,如下所示:
```python
from PyQt5.QtWidgets import QApplication, QTableView, QVBoxLayout, QWidget
app = QApplication([])
table = QTableView()
data = [[True, "Data 1"], [False, "Data 2"], [True, "Data 3"], [False, "Data 4"]]
model = MyModel(data)
table.setModel(model)
layout = QVBoxLayout()
layout.addWidget(table)
window = QWidget()
window.setLayout(layout)
window.show()
app.exec_()
```
这将创建一个窗口,其中包含一个具有 checkbox 的表格视图。您可以通过单击 checkbox 来切换其状态。
阅读全文