前言
使用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 效果