Qt 拖放;删除.ui文件

Qt 拖放;删除.ui文件,qt,drag-and-drop,qt4,Qt,Drag And Drop,Qt4,我在拖放方面遇到了很大的麻烦。我创建了一个新的Qt设计器表单类,其中有一个QListWidget和一个QWidget。现在我想在这两个小部件之间启用拖放 问题是,在哪里可以添加dragEnterEven(…)、dragmovevent(…)等函数?我只有这些class.h、class.cpp和class.ui文件 非常感谢您的帮助 -Samuli首先,如果您还没有阅读Qt的文档,那么您真的想从那里开始。我将要告诉你的是一个总结。在阅读了流程描述之后,您还应该明确地查看 第二,我道歉如果我误解了这

我在拖放方面遇到了很大的麻烦。我创建了一个新的Qt设计器表单类,其中有一个QListWidget和一个QWidget。现在我想在这两个小部件之间启用拖放

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

非常感谢您的帮助


-Samuli

首先,如果您还没有阅读Qt的文档,那么您真的想从那里开始。我将要告诉你的是一个总结。在阅读了流程描述之后,您还应该明确地查看

第二,我道歉如果我误解了这个问题,你的问题听起来好像你不太熟悉C++。您希望在
.h
文件中声明方法,并在
.cpp
文件中定义它们。您可以使用设计器来声明一些事件,但需要在
.cpp
中定义这些事件的实现。如果还不清楚,你需要先阅读更多关于C++的基本内容。 如果您对这些基本知识没有异议,下面是拖放工作原理的简短总结:

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

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

首先,如果您还没有阅读Qt的文档,那么您真的希望从这里开始。我将要告诉你的是一个总结。在阅读了流程描述之后,您还应该明确地查看

第二,我道歉如果我误解了这个问题,你的问题听起来好像你不太熟悉C++。您希望在
.h
文件中声明方法,并在
.cpp
文件中定义它们。您可以使用设计器来声明一些事件,但需要在
.cpp
中定义这些事件的实现。如果还不清楚,你需要先阅读更多关于C++的基本内容。 如果您对这些基本知识没有异议,下面是拖放工作原理的简短总结:

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

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

最简单的方法是对
QListWidget
QWidget
进行子类化,您希望能够在它们之间拖放,并在这些实现中处理事件。如果您这样做,您应该能够在designer中右键单击并升级主.ui文件中的小部件

如果您不想子类化,您可以查看事件过滤器,并在每个小部件上安装事件过滤器。然后,事件筛选器可以处理导致调用
dragEnterEvent()
dragmovevent()
的事件。这可能会让以后查看代码的人更加困惑


第二,我还要仔细阅读这些例子。你可以从一个工作示例中学到很多东西,并尝试修改它来做一些稍微不同的事情

最简单的方法是将<