QSqlDatabase 怎么将最后一列变成按钮
时间: 2023-12-06 12:05:21 浏览: 22
您可以使用QSqlTableModel类来处理QSqlDatabase中的数据,并在QTableView中显示它们。然后,您可以使用QItemDelegate类来自定义QTableView中的单元格,并将最后一列转换为按钮。
以下是一个示例代码:
```
QSqlTableModel *model = new QSqlTableModel;
model->setTable("mytable");
model->select();
QTableView *tableView = new QTableView;
tableView->setModel(model);
// Custom delegate for last column
class ButtonDelegate : public QItemDelegate {
public:
ButtonDelegate(QObject *parent = nullptr) : QItemDelegate(parent) {}
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override {
QPushButton *button = new QPushButton(parent);
button->setText("Click Me");
return button;
}
void setEditorData(QWidget *editor, const QModelIndex &index) const override {
// Do nothing
}
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override {
// Do nothing
}
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override {
editor->setGeometry(option.rect);
}
};
tableView->setItemDelegateForColumn(model->columnCount() - 1, new ButtonDelegate);
// Set up UI
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(tableView);
setLayout(layout);
```
在上面的代码中,我们首先创建了一个QSqlTableModel对象并将其用于QTableView。然后,我们定义了一个ButtonDelegate类来自定义QTableView中的单元格,将最后一列转换为按钮。最后,我们将此自定义委托分配给QTableView的最后一列。
请注意,ButtonDelegate类的createEditor()函数创建了一个QPushButton,该按钮将用作单元格的编辑器。但是,在这种情况下,我们不需要实现setEditorData()和setModelData()函数,因为我们不会在单元格中保存任何数据。相反,我们只需在updateEditorGeometry()函数中设置QPushButton的几何位置即可。
这样,您就可以将QSqlDatabase中的数据显示在QTableView中,并将最后一列转换为按钮。