QTreeWidget 通过拖动重新排序子项

2023-11-24

我有一个 QTreeWidget,它仅显示单个根节点和一级子节点。 我需要允许子节点的重新排序。 他们绝不能被重新养育。

这就是我在 QTreeWidget 中启用项目拖动的方法:

ui->levelElements->setSelectionMode(QAbstractItemView::SingleSelection);
ui->levelElements->setDragEnabled(true);
ui->levelElements->viewport()->setAcceptDrops(true);
ui->levelElements->setDropIndicatorShown(true);
ui->levelElements->setDragDropMode(QAbstractItemView::InternalMove);

根项的插入方式如下:

pItem = new QTreeWidgetItem(ui->levelElements);
pItem->setText(0, node.firstChild().nodeValue());
pItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled);

当我将子项插入视图时,它的声明如下:

pItem = new QTreeWidgetItem();
pItem->setText(0, strFileName);
pItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled);
pTreeRoot->addChild(pItem);

此时,我可以拖动子项目并将其“重新插入”到子项目列表中。我还可以将其移动到根级别 - 这是我不想要的。

我使用的是 QT Creator v3,因此 QTreeWidget 位于我的 UI 定义文件中。

我在这里错过了什么吗?


例如,您可以覆盖: virtual void dropEvent(QDropEvent * event)

#include <QApplication>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QDropEvent>

class TreeView: public QTreeWidget
{
public:
  TreeView()
  {
    resize(200, 300);

    setSelectionMode(QAbstractItemView::SingleSelection);
    setDragEnabled(true);
    viewport()->setAcceptDrops(true);
    setDropIndicatorShown(true);
    setDragDropMode(QAbstractItemView::InternalMove);

    QTreeWidgetItem* parentItem = new QTreeWidgetItem(this);
    parentItem->setText(0, "Test");
    parentItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled);

    for(int i = 0; i < 10; ++i)
    {
      QTreeWidgetItem* pItem = new QTreeWidgetItem(parentItem);
      pItem->setText(0, QString("Number %1").arg(i) );
      pItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled);
      pItem->addChild(pItem);
    }
  }

private:
  virtual void  dropEvent(QDropEvent * event)
  {
    QModelIndex droppedIndex = indexAt( event->pos() );

    if( !droppedIndex.isValid() )
      return;

    QTreeWidget::dropEvent(event);
  }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    TreeView widget;
    widget.show();

    return a.exec();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QTreeWidget 通过拖动重新排序子项 的相关文章

  • 为什么我应该使用内联代码? [复制]

    这个问题在这里已经有答案了 我是一名 C C 开发人员 这里有几个始终困扰我的问题 常规 代码和内联代码之间有很大区别吗 主要区别是什么 内联代码只是宏的一种 形式 吗 选择内联代码时必须进行什么样的权衡 Thanks 表现 正如之前的答案
  • C - 计算文件中的单词、字符和行数。字符数

    我必须用 C 编写一段代码 输出给定文件中的字符数 行数和单词数 任务看起来很简单 但我现在真的不确定出了什么问题 所以 这是代码 include
  • 更改图像颜色与透明背景

    我需要使用 c System Drawings 将透明背景上带有绿色圆圈的图像加载到位图图像中 这是最简单的部分 但是 我需要在将其添加到更大的图像之前更改圆圈的颜色 而不影响周围的透明度 就我而言 我需要将圆圈颜色更改为黄色并将其添加为太
  • 错误:“运行所选代码生成器时出错:包恢复失败”

    我正在尝试将控制器添加到 ASP NET Core 项目中的解决方案中 当我尝试这样做时 我收到此错误 我收到相同的消息 为控制器添加最小依赖项和完整依赖项 我也有这个问题 使用实体框架添加控制器 gt 带有操作的 API 控制器 将给出
  • .NET 中的 Class.forName() 等效项?

    动态获取对象类型然后创建它的新实例的 C 方法是什么 例如 如何在 C 中实现以下 Java 代码的结果 MyClass x MyClass Class forName classes MyChildClass newInstance Lo
  • 析构函数与成员函数竞赛

    当我在析构函数内时 其他线程是否可能开始执行对象的成员函数 遇到这种情况该如何处理呢 C 没有内在的保护来防止在删除对象后使用它 忘记竞争条件 另一个线程可以在完全删除你的对象后使用你的对象 Either 确保只有一个位置 代码拥有该对象
  • 将视频上传/保存到数据库或文件系统

    我以前从未尝试过保存视频 所以我对此了解不多 我知道如果视频很小 我可以转换为字节数组并保存到数据库 但是为了提高效率 我想了解如何将任何上传的视频保存到我的服务器文件中 然后只保存该文件的文件路径我的数据库表中的视频 我完全不知道如何开始
  • 如何生成可变参数包?

    给定不相关的输入是否可以生成非类型参数包 我的意思是 我想改变这一点 template
  • 为什么我收到编译错误“使用已删除的函数 'std::unique_ptr ...”

    我收到一条巨大的编译错误消息 c mingw include c 6 1 0 bits predefined ops h 123 18 error use of deleted function std unique ptr lt Tp D
  • Cookie 在 ASP.net 中失去价值

    我有以下设置 cookie 的代码 string locale DropDownList this LoginUser FindControl locale SelectedValue HttpCookie cookie new HttpC
  • 如何将输出重定向到 boost 日志?

    我有一个使用boost log的C 程序 我加载了用户提供的动态链接库 我想将 stderr 重定向到 boost 日志 以便用户的库随时执行以下操作 std cerr lt lt Some stuff 它产生相同的结果 BOOST LOG
  • 为什么最小的 int -2147483648 的类型为“long”? [复制]

    这个问题在这里已经有答案了 对于一个学校项目 我必须编写 C 函数 printf 的代码 一切进展顺利 但有一个问题我找不到好的答案 所以我来了 printf PRINTF d t d n 2147483648 告诉我 gcc Werror
  • 我的代码哪里有泄漏?

    下面是我的代码 它打开一个 XML 文件 old xml 过滤无效字符并写入另一个 XML 文件 abc xml 最后 我将再次加载 XML abc xml 当执行以下行时 出现异常 表示 xml 文件被另一个进程使用 xDoc Load
  • 从 AuthorizeAttribute 继承的属性不起作用

    我目前正在尝试根据用户角色在新的 ASP MVC 5 应用程序中实现安全性 目标是防止用户在没有特定角色 或更高角色 的情况下访问某些控制器或控制器方法 根据到目前为止我所读到的问题 我创建了一个继承 AuthorizeAttribute
  • 如何在 stl 模板中使用导出类 (__declspec(dllexport))?

    我正在使用导出的类 class declspec dllexport myclass private template declspec dllexport class std map
  • C++ 在预处理器 #if 中对 sizeof() 比较抛出编译错误

    我有这个 它不会从 Visual Studio 编译错误 致命错误 C1017 无效的整数常量表达式 我该怎么做 template
  • Membership.ValidateUser() 的目的是什么

    我一直在学习有关MembershipProvider类 我认为Membership ValidateUser 方法应该用于登录用户 然而我刚刚了解到有一个FormsAuthentication Authenticate 目的是什么Valid
  • 如何从 C# 中的 Web Api 方法正确获取字节数组?

    我有以下控制器方法 HttpPost Route SomeRoute public byte MyMethod FromBody string ID byte mybytearray db getmybytearray ID working
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • 从 C/C++ 程序进行 Ping

    我想编写一个 C 或 C 程序 给定一个 IP 地址 对其进行 Ping 然后根据 Ping 是否成功执行进一步的操作 这个怎么做 尽情享受Ping 页面 http www ping127001 com pingpage htm 其中有一个

随机推荐

  • 如何在Android应用程序中删除数据库

    如何从应用程序中删除数据库 你检查了吗deleteDatabase Android 中可用的方法吗
  • 使用令牌通过服务帐户登录 GKE

    我正在尝试使用服务帐户访问谷歌云上的 Kubernetes 集群 但我无法使其工作 我有一个带有一些 Pod 和入口的正在运行的系统 我希望能够更新部署的映像 我想使用这样的东西 远程 kubectl config set cluster
  • 关于Android权限和签名保护级别

    我是 Android 新手 对 AndroidManifest xml 中的权限保护级别 签名 有疑问 Android 参考文档说明了 签名 保护级别 仅当请求应用程序时系统才授予的权限 使用与声明的应用程序相同的证书进行签名 的许可 如果
  • JAXB 创建上下文和编组器成本

    这个问题有点理论化 创建 JAXB 上下文 编组器和反编组器的成本是多少 我发现我的代码可以受益于为所有编组操作保留相同的 JAXB 上下文和可能相同的编组器 而不是在每个编组上创建上下文和编组器 那么创建 JAXB 上下文和编组器 反编组
  • python matplotlib条形图添加条形标题[重复]

    这个问题在这里已经有答案了 我正在使用 matplotlib 和 python 2 7 我需要创建一个简单的 pyplot 条形图 对于每个条形图 我需要在其顶部添加它的 y 值 我正在使用以下代码创建条形图 import matplotl
  • 使用 Ajax 将表单数据发送到控制器操作

    我在 MVC3 中有一个页面 带有一个链接 Ajax ActionLink 当用户单击它时 它会调用控制器的操作 并将结果插入到 div 中 并进行替换 代码如下所示 Ajax ImageActionLink Images btn shar
  • 使用java从字符串中删除重复的字母

    我需要使用java中的正则表达式操作从字符串中删除重复的字母 例如 王子 gt 王子 苹果 gt 苹果 简单的解决方案 删除重复字符 像这样 final String str APPLEE String replaced str repla
  • 使用 AJAX 上传文件而不使用 FormData (IE9)

    In IE9 FormData不支持 这使得使用上传文件XMLHttpRequest不那么琐碎了 这可以做到吗 我已经看到提到了 iFrame 虽然我不反对编写一些繁琐的代码 但我对如何实现这一目标感到困惑 有很多资源讨论上传到 iFram
  • 使用头文件有哪些优点和缺点? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我对 Java C Scala 等编程语言以及 C C Objective C 等较低级编程语言有一些经验 我的观察是 低级语言尝试将头文件和实现文件分开 而其他高级编程语言从不将其分开
  • 在单元测试方法中显示 Windows 窗体

    我刚刚在 Visual Studio NET 中发现了单元测试项目 并使用测试方法来设置我开发的全局代码的示例 一些全局方法涉及显示可重用的对话框 例如日期选择器和输入框 问题是 有时表格会显示 有时则不会 我认为这与模态有关 因为我有一个
  • Kotlin:“return@”是什么意思?

    我在我的一个项目中使用 RxJava 我使用 Android Studio 插件和地图之一将我的类之一转换为 KotlinflatMaplambda java 中的 Func1 中间体返回如下所示 Func1 我不懂这啥意思 somethi
  • 将两个数据框逐个元素粘贴在一起

    我需要逐个元素粘贴两个数据帧的内容以输入到另一个程序 我有一个平均值数据框和一个平均值标准误差数据框 我尝试使用 R Paste 函数 但它似乎无法处理数据框 使用向量时 似乎将第一个向量的所有元素连接到一个字符串中 并将第二个向量的所有元
  • Javascript 中使用双括号调用函数

    当我调用函数时hi 带双括号的函数显示hi输出 它也会给出错误 说hi不是函数 使用的意义是什么 带函数名 如果出现以下情况 双括号会很有用 hi返回了一个函数而不是它的名称 就像 function hi return hello hi 这
  • 查找包含另一个字符串中一个字符串的所有字符的最小窗口的长度

    最近我接受了采访 我做得不好 因为我被以下问题卡住了 假设给出一个序列 A D C B D A B C D A C D 搜索顺序如下 A C D 任务是找到给定字符串中的开始和结束索引 该索引包含保留顺序的搜索字符串的所有字符 Output
  • 如何重载打印函数来扩展其功能?

    我想知道是否有内置功能print可以被覆盖 以便以下语句将同时写入控制台和文件 print test0 test1 test2 sep n 另外 我想知道是否可以修改内置的源代码print功能 使用装饰器 简化示例 def my decor
  • Android 编辑文本 - 光标停留在起始位置

    我在我的项目中使用编辑文本 问题是 每当我在文本框中输入任何内容时 它都会显示出来 但无论我输入多少个字符 光标都不会从其起始位置移动 此外 我无法通过单击文本框中的任何特定字符来移动 我的包含编辑文本的 xml 文件是这样的
  • 如何知道 PHAsset 是否已被修改?

    更具体地说 你如何知道一个PHAsset标的资产的当前版本是否与原始版本不同 我的用户只需在必要时在当前资产或原始资产之间进行选择 然后我需要他们的答案PHImageRequestOptions version 从 iOS 16 开始 PH
  • 如何打开 Chrome DevTools 命令菜单?

    人们如何访问下面屏幕截图中的命令菜单 If you re unable to use keyboard shortcut Cmd Ctrl Shift P you can also click the three stacked dots
  • WPF 中的 x:Reference 何时解析?为什么 XAML 元素顺序会影响它?

    x 在 XAML 中重新排列元素后 无法解析引用 这里我展示一个工作代码 只需移动 DataGrid 元素 使其位于按钮元素之后 ContextMenu 中的 MenuItem 和 Button IsEnabled 中的 MultiBind
  • QTreeWidget 通过拖动重新排序子项

    我有一个 QTreeWidget 它仅显示单个根节点和一级子节点 我需要允许子节点的重新排序 他们绝不能被重新养育 这就是我在 QTreeWidget 中启用项目拖动的方法 ui gt levelElements gt setSelecti