使用.ui文件拖放
我在拖动&下降时遇到了很大的麻烦。我创建了一个新的Qt设计器表单类,其中我有一个QListWidget和一个QWidget。现在我想在这两个小部件之间拖放&。使用.ui文件拖放
问题是,我可以在哪里添加dragEnterEven(...),dragMoveEvent(...)等功能?我只有这些class.h,class.cpp和class.ui文件。
任何帮助非常感谢!
-Samuli
首先,如果你没有看过Qt的Drag and Drop文档,你真的想从那里开始。我要告诉你的是对那里有什么的总结。一旦你阅读过程描述,你也一定要看看drag and drop examples。
其次,如果我误解了这一点,我很抱歉,你的问题听起来像你对C++不太熟悉。您想要声明.h
文件中的方法,并在.cpp
文件中定义它们。您可以使用Designer来完成某些事件声明,但您需要在.cpp
中定义这些事件的实现。如果还不清楚,你需要先阅读更多关于基本C++的知识。
如果你确定这些基本知识,这里的拖放是如何工作的一个简短的总结:
- 创建
QDrag
:- 拖动所做。您想在触发拖动的情况下这样做,即在任何情况下我都可以想到鼠标点击(
mousePressEvent
或mouseMoveEvent
- 哪一个取决于您想要查看的确切行为)。 - 编码您想要拖动的数据。您可以使用MIME编码来完成此操作,这是标记正在拖动的文档类型的标准方法。 (例子包括文本,图像和大多数其他媒体格式)。假设文本为简单情况。
- 创建用于适当类型
QMimeData
- 设定数据(例如,用于文本使用
QMimeData::setText
)\ - 的mime数据添加到所述拖动对象与
QDrag::setMimeData
。 - 请在您的拖动对象上拨打
QDrag::exec
。- 启用使用
QWidget::setAcceptDrops(true)
给定插件的acceptDrops
属性:
- 启用使用
- 创建用于适当类型
- 滴被完成。
- 在您的小部件上定义
dropEvent
以处理丢弃。您使用setMimeData
在拖动中设置的数据可用作放置事件QDropEvent::mimeData
的方法。您需要使用适当的文档类型从中提取数据(例如text()
)。
- 拖动所做。您想在触发拖动的情况下这样做,即在任何情况下我都可以想到鼠标点击(
这显然是不完整的,但拖放有足够的步骤,你真的应该详细阅读一次约他们,看一些例子。本摘要旨在让您了解您需要做什么。
最简单的方法是继承想要在其间拖放的QListWidget
和QWidget
,并处理这些实现中的事件。如果你这样做,你应该能够右键单击设计器,并在主要的.ui文件中推广这些小部件。
如果您不想继承子类,则可以查看事件筛选器,并在每个小部件上安装事件筛选器。事件过滤器可以处理导致调用dragEnterEvent()
和dragMoveEvent()
的事件。这可能会让任何人稍后看到你的代码更令人困惑。
我也是第二个quark's suggestion细读的例子。你可以通过一个工作示例学习很多东西,并尝试修改它来做一些稍微不同的事情。