代码之家  ›  专栏  ›  技术社区  ›  boogie

拖放.ui文件

  •  0
  • boogie  · 技术社区  · 16 年前

    我在拖拽方面遇到了大麻烦。我创建了一个新的qt设计器窗体类,其中有一个qlistwidget和一个qwidget。现在,我想在这两个小部件之间启用拖放。

    问题是,在哪里可以添加DragEnterEven(…)、DragMoveEvent(…)等函数?我只有这些class.h、class.cpp和class.ui文件。

    非常感谢您的帮助!

    -萨穆利

    2 回复  |  直到 16 年前
        1
  •  3
  •   quark    16 年前

    首先,如果你没有读过qt's Drag and Drop 你真正想从那里开始的文档。我要告诉你的是一个总结。你也应该看看 drag and drop examples 一旦你读过这个过程的描述。

    其次,我很抱歉,如果我误解了这个问题,你的问题听起来好像你不太熟悉C++。您要在中声明方法 .h 文件,并在 .cpp 文件。您可以使用设计器来执行事件的某些声明,但需要在 CPP . 如果还不清楚,你需要先阅读更多关于C++的基础知识。

    如果您对这些基础知识还满意,下面简要总结一下拖放的工作原理:

    • 拖动通过以下方式完成:
      • 创建一个 QDrag .您希望在触发拖动的事件中执行此操作,也就是说,在所有情况下,我都可以想到鼠标单击( mousePressEvent mouseMoveEvent --哪一个取决于你想看到的具体行为)。
      • 对要拖动的数据进行编码。您可以使用mime编码来实现这一点,这是一种标记正在拖动的文档类型的标准方法。(示例包括文本、图像和大多数其他媒体格式)。假设简单案例的文本。
        • 创建一个 QMimeData
        • 为适当的类型设置数据(例如,用于文本) QMimeData::setText )
        • 将mime数据添加到拖动对象 QDrag::setMimeData .
        • 呼叫 QDrag::exec 在拖动对象上。
    • 删除由以下人员完成:
      • 启用 acceptDrops 属性在给定的小部件上使用 QWidget::setAcceptDrops(true) .
      • 定义 dropEvent 在你的小部件上处理掉。在拖动中设置的数据使用 setMimeData 可用作Drop事件的方法 QDropEvent::mimeData . 您需要使用适当的文档类型(例如 text() )

    显然,这还不完整,但是拖放有足够的步骤,您真的应该仔细阅读一下它们,并查看一些示例。本总结旨在让您了解您需要做什么。

        2
  •  0
  •   Community Mohan Dere    8 年前

    最简单的方法是将 QListWidget QWidget 您希望能够在这些实现中拖放并处理事件。如果这样做,您应该能够右键单击Designer并提升主.ui文件中的小部件。

    如果不想子类,可以查看事件过滤器,并在每个小部件上安装事件过滤器。然后事件筛选器可以处理导致 dragEnterEvent() dragMoveEvent() 被召唤。对于以后查看您的代码的任何人来说,这可能会更令人困惑。

    我也是第二 quark's suggestion 细读例子。你可以通过一个工作的例子来学习很多东西,并尝试修改它来做一些稍微不同的事情。