2009-11-13 58 views
0

我在拖动&下降时遇到了很大的麻烦。我创建了一个新的Qt设计器表单类,其中我有一个QListWidget和一个QWidget。现在我想在这两个小部件之间拖放&。使用.ui文件拖放

问题是,我可以在哪里添加dragEnterEven(...),dragMoveEvent(...)等功能?我只有这些class.h,class.cpp和class.ui文件。

任何帮助非常感谢!

-Samuli

回答

3

首先,如果你没有看过Qt的Drag and Drop文档,你真的想从那里开始。我要告诉你的是对那里有什么的总结。一旦你阅读过程描述,你也一定要看看drag and drop examples

其次,如果我误解了这一点,我很抱歉,你的问题听起来像你对C++不太熟悉。您想要声明.h文件中的方法,并在.cpp文件中定义它们。您可以使用Designer来完成某些事件声明,但您需要在.cpp中定义这些事件的实现。如果还不清楚,你需要先阅读更多关于基本C++的知识。

如果你确定这些基本知识,这里的拖放是如何工作的一个简短的总结:

  • 创建QDrag

    • 拖动所做。您想在触发拖动的情况下这样做,即在任何情况下我都可以想到鼠标点击(mousePressEventmouseMoveEvent - 哪一个取决于您想要查看的确切行为)。
    • 编码您想要拖动的数据。您可以使用MIME编码来完成此操作,这是标记正在拖动的文档类型的标准方法。 (例子包括文本,图像和大多数其他媒体格式)。假设文本为简单情况。
      • 创建用于适当类型QMimeData
      • 设定数据(例如,用于文本使用QMimeData::setText)\
      • 的mime数据添加到所述拖动对象与QDrag::setMimeData
      • 请在您的拖动对象上拨打QDrag::exec
        • 启用使用QWidget::setAcceptDrops(true)给定插件的acceptDrops属性:
    • 滴被完成。
    • 在您的小部件上定义dropEvent以处理丢弃。您使用setMimeData在拖动中设置的数据可用作放置事件QDropEvent::mimeData的方法。您需要使用适当的文档类型从中提取数据(例如text())。

这显然是不完整的,但拖放有足够的步骤,你真的应该详细阅读一次约他们,看一些例子。本摘要旨在让您了解您需要做什么。

0

最简单的方法是继承想要在其间拖放的QListWidgetQWidget,并处理这些实现中的事件。如果你这样做,你应该能够右键单击设计器,并在主要的.ui文件中推广这些小部件。

如果您不想继承子类,则可以查看事件筛选器,并在每个小部件上安装事件筛选器。事件过滤器可以处理导致调用dragEnterEvent()dragMoveEvent()的事件。这可能会让任何人稍后看到你的代码更令人困惑。

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