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 ...