void init(QTreeWidget &w) {
//设置表头标签
w.setHeaderLabels(QStringList() << QString::fromLocal8Bit("节点") << QString::fromLocal8Bit("内容"));
QList
list;
//设置头节点和孩子节点
for (int i = 0; i < 3; ++i) { //三个头节点
QTreeWidgetItem *item = new QTreeWidgetItem(&w);
item->setFlags(Qt::ItemIsEditable | item->flags());
cout << item->flags();
item->setExpanded(true); // 只有设置了父控件,才能展开
list << item;
//设置父亲节点内容
item->setText(0, QString::fromLocal8Bit("父节点%1").arg(i));
item->setText(1, QString::fromLocal8Bit("内容::父亲节点%1").arg(i));
for (int j = 0; j < 2; ++j) { //每个头节点有两个孩子节点
QTreeWidgetItem *child = new QTreeWidgetItem(item);
child->setFlags(Qt::ItemIsEditable | item->flags());
//设置孩子节点内容
child->setText(0, QString::fromLocal8Bit("孩子节点%1::%2").arg(i).arg(j));
child->setText(1, QString::fromLocal8Bit("内容::孩子节点%1").arg(j));
//添加头节点到QTreeWidget中
w.addTopLevelItems(list);
w.resize(600, 400); //设置窗口大小
w.resizeColumnToContents(1);
w.header()->setSectionsClickable(false);
w.setEditTriggers(QTreeWidget::DoubleClicked); //双击编辑
//鼠标拖动操作
void setDragAndDrop(QTreeWidget &w) {
w.setDragEnabled(true); // 启用拖动
w.viewport()->setAcceptDrops(true); // viewport 接受放下动作,默认是复制操作
w.showDropIndicator(); // 设置放下指示
w.setDragDropMode(QTreeWidget::InternalMove);// 内部 移动
//鼠标选择节点
void setSelectionMode(QTreeWidget &w) {
w.setSelectionBehavior(QTreeWidget::SelectRows); // 选择行
w.setSelectionMode(QTreeWidget::ContiguousSelection);// 连续选择
int main(int argc, char *argv[])
QApplication a(argc, argv);
QTreeWidget w;
// 初始化Tree
init(w);
// 设置Tree的拖放
setDragAndDrop(w);
// 设置Tree的选定模式和行为
setSelectionMode(w);
w.show();
return a.exec();
#include
Qt
MyTree
Widget
::
Qt
MyTree
Widget
(Q
Widget
*parent) :
QT
ree
Widget
(parent)
m_CtrlPresse.
Qt
之
QT
ree
Widget
:1
拖拽
项目
QT
ree
Widget
的
拖拽
实现,比较简单,但过程是绕了点路的,按照常规的方法:子类化
QT
ree
Widget
、重写 Drag 和 Drop的相关事件、利用QMimeData,QDrag类来实现,
功能
虽然实现了,但是关闭程序是,有可能会出现异常,类似 指针被二次析构了一样。偶发性的错误,挺让我头疼。
牢骚过后,上干货。
【 Model/View Programming 】主题中有这么一段,并试着翻译成中文,便于理解。
在便捷类中使用
刚进公司没多久,老大就让做一个实现拖放的小插件,要求可
拖拽
,可缩放。从网上查了很多资料,也看了别人写的demo,总算摸索出一些门道,下面分享给大家,如有疑问,可评论,大家一起学习!
QCTree
Widget
.cpp
// 左侧项目树
QCTree
Widget
::QCTree
Widget
(const QString& text, Q
Widget
*parent)
: ...
在学习
Qt
的过程中接触过QList
Widget
和
QT
ext
Widget
的拖放操作,现
QT
项目实操需用到树形节点拖放的操作,在参考了教程与案例后,做个实践小Demo:
class Tree
Widget
: public
QT
ree
Widget
Q_OBJECT
public:
explicit Tree
Widget
(Q
Widget
*parent = nullptr); ...
文章目录[隐藏] 前言demo
功能
demo 代码demo 效果 前言
使用
Qt
好久了,发现自己还没有用过
QT
ree
Widget
。今天尝试了一下写了个简单的 demo。
demo
功能
1. 支持最简单的
QT
ree
Widget
显示;
2. 支持显示多列;
3. 支持多个树之间
拖拽
,也支持单个树之间
拖拽
(非自定义);
4. 列平分。
demo 代码
TreeDrag ...