QTreeWidget简单使用例子(可拖拽)

文章目录[隐藏]

前言

使用Qt好久了,发现自己还没有用过QTreeWidget。今天尝试了一下写了个简单的 demo。

demo 功能

1. 支持最简单的QTreeWidget显示;

2. 支持显示多列;

3. 支持多个树之间拖拽,也支持单个树之间拖拽(非自定义);

4. 列平分。


demo 代码

TreeDrag 类(h/cpp)
#ifndef TREEDRAG_H
#define TREEDRAG_H

#include <QWidget>
#include <QTreeWidget>
#include "qctreewidget.h"

namespace Ui {
class TreeDrag;
}

class TreeDrag : public QWidget
{
    Q_OBJECT

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


private:
    void setTreeSettings(QTreeWidget *treeWidget);
private:
    Ui::TreeDrag *ui;


};

#endif // TREEDRAG_H
#include "treedrag.h"
#include "ui_treedrag.h"

TreeDrag::TreeDrag(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::TreeDrag)
{
    ui->setupUi(this);

    setTreeSettings(ui->treeWidget);
    setTreeSettings(ui->treeWidget_2);
    setTreeSettings(ui->treeWidget_3);

}

TreeDrag::~TreeDrag()
{
    delete ui;
}

void TreeDrag::setTreeSettings(QTreeWidget* treeWidget)
{
    QStringList headers;
    headers << "name" << "cmd";
    treeWidget->setColumnCount(2);
    treeWidget->setHeaderLabels(headers); // 设置头
    treeWidget->setAcceptDrops(true); // 接受拖拽内容
    treeWidget->setDragEnabled(true); // 设置拖拽使能
    treeWidget->setSelectionBehavior(QAbstractItemView::SelectRows); // 单行选中
    treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch); // 列平分
}


QCTreeWidget 类(h/cpp)
#ifndef QCTREEWIDGET_H
#define QCTREEWIDGET_H

#include <QWidget>
#include <QTreeWidget>

class QCTreeWidget : public QTreeWidget
{
    Q_OBJECT
public:
    explicit QCTreeWidget(QWidget *parent = nullptr);


    void setTreeData();
    void setTreeSettings();

signals:

private:


};

#endif // QCTREEWIDGET_H
#include "qctreewidget.h"

QCTreeWidget::QCTreeWidget(QWidget *parent) : QTreeWidget(parent)
{
    setTreeData();
    setTreeSettings();
}


void QCTreeWidget::setTreeData()
{


    QTreeWidgetItem* item = nullptr;
    QTreeWidgetItem* itemChild = nullptr;

    for(int i = 0; i < 2; ++i)
    {
        item = new QTreeWidgetItem(this);
        item->setText(0, QString("item_0_%1").arg(i));
        item->setText(1, QString("item_1_%1").arg(i));
        this->addTopLevelItem(item);

        itemChild = new QTreeWidgetItem(item);
        for(int j = 0; j < 2; ++j)
        {
            itemChild->setText(j, QString("itemChild_%1_%2").arg(j).arg(i));
        }
    }
}

void QCTreeWidget::setTreeSettings()
{
    /*QStringList headers;
    headers << "name" << "cmd";
    this->setColumnCount(2);
    this->setHeaderLabels(headers);
    this->setAcceptDrops(true);
    this->setDragEnabled(true);
    this->setSelectionBehavior(QAbstractItemView::SelectRows);*/
}

demo 效果

QTreeWidget简单使用例子(可拖拽)
posted @ 2020-09-21 18:53  不随。  阅读(128)  评论(0编辑  收藏  举报  来源