Qt 拖放;删除.ui文件
我在拖放方面遇到了很大的麻烦。我创建了一个新的Qt设计器表单类,其中有一个QListWidget和一个QWidget。现在我想在这两个小部件之间启用拖放 问题是,在哪里可以添加dragEnterEven(…)、dragmovevent(…)等函数?我只有这些class.h、class.cpp和class.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的文档,那么您真的想从那里开始。我将要告诉你的是一个总结。在阅读了流程描述之后,您还应该明确地查看 第二,我道歉如果我误解了这
-Samuli首先,如果您还没有阅读Qt的文档,那么您真的想从那里开始。我将要告诉你的是一个总结。在阅读了流程描述之后,您还应该明确地查看 第二,我道歉如果我误解了这个问题,你的问题听起来好像你不太熟悉C++。您希望在
.h
文件中声明方法,并在.cpp
文件中定义它们。您可以使用设计器来声明一些事件,但需要在.cpp
中定义这些事件的实现。如果还不清楚,你需要先阅读更多关于C++的基本内容。
如果您对这些基本知识没有异议,下面是拖放工作原理的简短总结:
- 拖动通过以下方式完成:
- 创建
。您希望在触发拖动的事件中执行此操作,也就是说,在所有情况下,我都能想到鼠标单击(QDrag
或mousePressEvent
——哪一个取决于您希望看到的确切行为)mouseMoveEvent
- 对要拖动的数据进行编码。您可以使用MIME编码来实现这一点,MIME编码是一种标准的方法,用于标记要拖动的文档类型。(示例包括文本、图像和大多数其他媒体格式)。假设文本用于简单的情况。
- 创建
QMimeData
- 为适当的类型设置数据(例如,用于文本使用
)\QMimeData::setText
- 使用
将mime数据添加到拖动对象QDrag::setMimeData
- 在拖动对象上调用
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
- 使用
将mime数据添加到拖动对象QDrag::setMimeData
- 在拖动对象上调用
QDrag::exec
- 创建
- 创建
- 通过以下方式进行放置:
- 使用
在给定小部件上启用QWidget::setAcceptDrops(true)
属性acceptDrops
- 在小部件上定义
,以处理拖放。使用dropEvent
在拖动中设置的数据可作为拖放事件setMimeData
的方法使用。您需要使用适当的文档类型(例如qdropent::mimeData
)从中提取数据text()
- 使用
显然,这还不完整,但拖放操作有足够的步骤,您真的应该仔细阅读一下,并查看一些示例。此摘要旨在让您了解需要做什么。最简单的方法是对
QListWidget
和QWidget
进行子类化,您希望能够在它们之间拖放,并在这些实现中处理事件。如果您这样做,您应该能够在designer中右键单击并升级主.ui文件中的小部件
如果您不想子类化,您可以查看事件过滤器,并在每个小部件上安装事件过滤器。然后,事件筛选器可以处理导致调用dragEnterEvent()
和dragmovevent()
的事件。这可能会让以后查看代码的人更加困惑
第二,我还要仔细阅读这些例子。你可以从一个工作示例中学到很多东西,并尝试修改它来做一些稍微不同的事情 最简单的方法是将<