当前位置: 首页 > news >正文

QT设备树,具有设备树过滤功能

在C++ Qt中实现一个设备树以及其过滤功能,可以使用QTreeView配合QStandardItemModel来表示树形结构的数据,同时将使用QSortFilterProxyModel来实现过滤功能。

下面是一个示例程序,展示了如何构建一个简单的设备树并提供过滤功能:

#include <QApplication>
#include <QTreeView>
#include <QStandardItemModel>
#include <QSortFilterProxyModel>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QWidget>

class FilteredTreeView : public QWidget {
    Q_OBJECT

public:
    FilteredTreeView(QWidget *parent = nullptr) : QWidget(parent) {
        // Create model
        model = new QStandardItemModel(this);
        model->setHorizontalHeaderLabels(QStringList() << "Devices");

        // Populate model with devices
        populateModel();

        // Create filter proxy model
        proxyModel = new QSortFilterProxyModel(this);
        proxyModel->setSourceModel(model);
        proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);

        // Create tree view
        treeView = new QTreeView(this);
        treeView->setModel(proxyModel);

        // Create filter input
        filterLineEdit = new QLineEdit(this);
        connect(filterLineEdit, &QLineEdit::textChanged, this, &FilteredTreeView::onFilterChanged);

        // Create layout
        QVBoxLayout *layout = new QVBoxLayout(this);
        layout->addWidget(filterLineEdit);
        layout->addWidget(treeView);
        setLayout(layout);
    }

private slots:
    void onFilterChanged(const QString &filterText) {
        proxyModel->setFilterRegExp(QRegExp(filterText, Qt::CaseInsensitive, QRegExp::FixedString));
    }

private:
    void populateModel() {
        // Sample device tree structure
        QStandardItem *rootItem = model->invisibleRootItem();

        QStandardItem *device1 = new QStandardItem("Device 1");
        device1->appendRow(new QStandardItem("Sub Device 1.1"));
        device1->appendRow(new QStandardItem("Sub Device 1.2"));
        rootItem->appendRow(device1);

        QStandardItem *device2 = new QStandardItem("Device 2");
        device2->appendRow(new QStandardItem("Sub Device 2.1"));
        device2->appendRow(new QStandardItem("Sub Device 2.2"));
        rootItem->appendRow(device2);

        QStandardItem *device3 = new QStandardItem("Device 3");
        rootItem->appendRow(device3);
    }

    QStandardItemModel *model;
    QSortFilterProxyModel *proxyModel;
    QTreeView *treeView;
    QLineEdit *filterLineEdit;
};

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    FilteredTreeView w;
    w.resize(400, 300);
    w.setWindowTitle("Device Tree with Filter");
    w.show();
    return a.exec();
}

代码解释

  1. FilterInput: 我们有一个 QLineEdit 用于输入过滤文本。
  2. QStandardItemModel: 用于管理设备树数据。我们在 populateModel 函数中创建了一些示例设备和子设备。
  3. QSortFilterProxyModel: 用于实现过滤功能。它将在输入框中输入字符时自动更新视图。
  4. 连接信号: 当过滤文本发生变化时,通过 onFilterChanged 方法更新代理模型的过滤条件。
  5. QTreeView: 视图部分,用于显示设备树。

运行结果

运行这个程序,将看到一个窗口,其中包含一个设备树和一个可以输入过滤文本的输入框。当您在输入框中键入文本时,设备树将自动过滤显示与输入文本匹配的设备和子设备项。

http://www.dtcms.com/a/17070.html

相关文章:

  • 什么是计算机中的 “终端”?
  • LeetCode《算法通关手册》 1.2 数组排序
  • 基于springboot+vue的考研学习分享平台设计与实现
  • 最新华为 HCIP-Datacom(H12-821)
  • Cisco Fabric Manager 5.0:统一数据的可见性和控制
  • 文心一言与gpt,核心原理对比
  • Python项目31:待办事项列表应用1.0(命令行界面+Json+类+初学者必做)
  • 基于Odoo的数据中台建设:助力企业数据驱动决策
  • CentOS-Stream 9更换RT实时内核
  • 代码aaa
  • 【Unity】搭建泛型事件框架,可广泛应用于中小型的游戏项目!!!
  • STM32启动过程概述
  • TCP/IP 四层模型数据的封装过程
  • kkFileView二开之pdf转图片接口
  • 你如何利用SIMD(如SSE/AVX)优化图像处理的性能?
  • 数据结构 二叉树
  • 超纯水设备的智能化控制系统为用户带来安全简便的操作体验
  • AWS SES 邮件服务退信/投诉处理与最佳实践指南
  • 记一次MySQL故障解决
  • Unity入门3 添加碰撞体
  • 打造高效狼性团队的实践指南
  • 将错误消息输出到标准错误流:Rust中的最佳实践
  • 掌控系统性能的利器:自动化系统性能监控工具
  • 使用c风格和c++风格逐行读取文件
  • 力扣19题——删除链表的倒数第 N 个结点
  • ping使用的协议,ping使用的协议是
  • linux系统测试网络pps、带宽和延时(方案来源于阿里云)
  • 解锁建造者模式:Java 编程中的对象构建秘籍
  • IT行业方向细分,如何做到专家水平——4.网络安全(Cybersecurity)
  • 进化强化学习