4. 高级功能

自定义项委托

通过 QStyledItemDelegate 自定义项的绘制逻辑(如进度条、图标组合):

class CustomDelegate : public QStyledItemDelegate {
public:
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override {
        // 自定义绘制逻辑
    }
};

// 设置委托
treeWidget->setItemDelegate(new CustomDelegate());
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
拖放支持

启用拖放操作:

treeWidget->setDragEnabled(true);
treeWidget->setDragDropMode(QAbstractItemView::InternalDrag);
treeWidget->setDropIndicatorShown(true);
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
数据绑定

结合 QStandardItemModel 或自定义模型实现动态数据加载(QTreeWidget 本身是 QTreeView 的简化封装)。


5. 性能优化


6. 常见问题

样式不生效
图标显示异常
复选框状态同步

7. 完整示例

一个简单的文件树浏览器:

QTreeWidget *treeWidget = new QTreeWidget(this);
treeWidget->setColumnCount(2);
treeWidget->setHeaderLabels({"Name", "Size"});

// 模拟添加文件/文件夹
QTreeWidgetItem *root = new QTreeWidgetItem(treeWidget);
root->setText(0, "Documents");
root->setIcon(0, QIcon(":/icons/folder.png"));

QTreeWidgetItem *file = new QTreeWidgetItem(root);
file->setText(0, "report.pdf");
file->setText(1, "2.5 MB");
file->setIcon(0, QIcon(":/icons/file.png"));

treeWidget->expandAll();
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

8. 总结

QTreeWidget 是 Qt 中快速实现树形结构的便捷工具,适用于中小规模数据。对于复杂需求(如动态数据、高性能渲染),建议使用 QTreeView + QAbstractItemModel 的模型/视图架构。通过合理使用样式表和信号槽机制,可以轻松实现美观且交互丰富的树形控件。

注:本文转载自blog.csdn.net的PlutoZuo的文章"https://blog.csdn.net/PlutoZuo/article/details/133638312"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!