【问题标题】:Qt Drag and Drop QTreeViewQt 拖放 QTreeView
【发布时间】:2015-09-15 13:19:11
【问题描述】:

我的 TreeView 有各种带有孩子的文件夹。每个孩子都有一个图标和文本名称。用户可以选择一个或多个项目并将它们拖到 QMDI 区域中。作为我的 darg drop 的图像,我有一个本地图片拖动-> setPixmap(QPixmap(myPixImage))。我需要的是:我如何动态地将带有图标和文本的选定项目作为 myPixImage。

【问题讨论】:

    标签: c++ qt drag-and-drop


    【解决方案1】:

    当您自己的代码创建 QDrag 对象时,设置像素图很容易,但是使用 QXxxViews(不仅是 QTreeView),您只能控制 QMimeData(当覆盖 QAbstractItemModel::mimeData() 时)。

    因此,如果您真的需要它,我现在唯一的方法是继承 QTreeView,覆盖(嗯...重新实现)mouseMoveEvent() 等。 如果这样做,您可以在创建 QDrag 时通过例如selectionModel()->selectedItems().

    【讨论】:

      【解决方案2】:

      首先:没有简单的方法可以做到这一点。基本上是因为QDrag::exec 是在您(作为开发人员)允许开始拖动时启动的(例如here),并且在拖动完成之前它不会返回。

      您想在拖动时更改您的QDrag 对象

      您最好的选择是:

      1. 之后创建Drag对象和之前运行QDrag::exec将对象存储在可以在代码中的任何位置访问的某个池中。可能类似于static map<QDrag *> pool
      2. 设置一个循环的QTimer事件,不断更新QDrag对象,该对象可以从池中获取。请不要尝试使用Qthreads,因为您最终会遇到一些“QObject can't be move from/to thread”错误。
      3. 当拖动结束时(作为用户),从池中清理对象

      请注意,您必须在视觉上相应地调整 QTimer 重复事件。

      【讨论】:

        猜你喜欢
        • 2012-01-14
        • 1970-01-01
        • 2011-05-09
        • 2016-03-14
        • 1970-01-01
        • 2011-05-14
        • 2014-06-16
        • 2014-01-03
        • 2012-05-23
        相关资源
        最近更新 更多