QTreeView和QStandardItemModel的简单使用

Dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class QStandardItemModel;
class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = nullptr);
    ~Dialog();


private slots:
    void on_one_clicked();

    void on_two_clicked();

private:
    Ui::Dialog *ui;

    QStandardItemModel* model1;
    QStandardItemModel* model2;
};

#endif // DIALOG_H

Dialog.cpp

#include "Dialog.h"
#include "ui_Dialog.h"
#include <QStandardItemModel>

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    model1 = new QStandardItemModel;
    model2 = new QStandardItemModel;

    model1->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("序号a") << QStringLiteral("名称a"));     //设置列头
   
可以通过自定义 QStyledItemDelegate 实现在每行节点前以及末尾添加两个按钮。 首先,需要自定义一个 QStyledItemDelegate,并重写其 paint() 和 sizeHint() 方法。在 paint() 方法中,可以通过 painter 绘制每行节点前以及末尾的按钮;在 sizeHint() 方法中,可以设置每行的高度。 然后,在使用 QTreeView 显示数据时,将自定义的 QStyledItemDelegate 设置给 QTreeViewitemDelegate() 方法即可。 下面是一个简单的示例代码,仅供参考: ```python from PyQt5.QtCore import Qt, QSize from PyQt5.QtGui import QIcon, QPainter from PyQt5.QtWidgets import QStyledItemDelegate, QTreeView, QStandardItemModel, QApplication, QPushButton class MyItemDelegate(QStyledItemDelegate): def paint(self, painter, option, index): if index.column() == 0: # 在每行节点前添加按钮 btn1 = QPushButton(QIcon('icon1.png'), '') btn1.setGeometry(option.rect.x(), option.rect.y(), 20, 20) btn1.setStyleSheet('QPushButton{border:none;}') btn1.show() if index.column() == index.model().columnCount() - 1: # 在每行节点末尾添加按钮 btn2 = QPushButton(QIcon('icon2.png'), '') btn2.setGeometry(option.rect.right() - 20, option.rect.y(), 20, 20) btn2.setStyleSheet('QPushButton{border:none;}') btn2.show() # 绘制节点内容 super().paint(painter, option, index) def sizeHint(self, option, index): # 设置每行的高度 size = super().sizeHint(option, index) size.setHeight(30) return size if __name__ == '__main__': app = QApplication([]) model = QStandardItemModel() for i in range(5): item = QStandardItem(f'Item {i}') model.appendRow(item) tree_view = QTreeView() tree_view.setModel(model) # 设置自定义的 QStyledItemDelegate delegate = MyItemDelegate() tree_view.setItemDelegate(delegate) tree_view.show() app.exec_() ``` 在上述示例中,我们重写了 QStyledItemDelegate 的 paint() 和 sizeHint() 方法,并在 paint() 方法中绘制了每行节点前以及末尾的按钮,并在 sizeHint() 方法中设置了每行的高度。 然后,在使用 QTreeView 显示数据时,将自定义的 QStyledItemDelegate 设置给 QTreeViewitemDelegate() 方法即可。 需要注意的是,示例中绘制按钮的方式可能不够完美,可以根据实际需求进行更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值