使用QWindow拖放

时间:2015-03-03 10:40:06

标签: qt drag-and-drop

我的自定义QWidget包含自定义QWindow。使用OpenGL的QWindow用作"连接器"渲染框架和Qt应用程序之间。

使用重写QWindow方法处理鼠标和键盘事件。

的伪代码:

class MyWindow : public QWindow
{
public:
  MyWindow : QWindow() { /* GL stuff init*/ }
protected:
  // mouse/keyboard event handling
  // expose event handling
  // resize event handling
  // ...
};

class MyWidget : public QWidget
{
public:
  MyWidget : QWidget()
  {
    auto window = new MyWindow();
    auto container = createWindowContainer(window);
    layout()->addWidget( container );
    setAcceptDrops( true );
  }

protected:
  // overriding drop event, but is doesn't work
};

问题:如何处理掉落事件(在哪里不重要)?

问题:

  1. QWindow没有为拖放支持提供虚拟方法。
  2. QWidget::dragEnterEventQWidget::dropEvent(和类似的)未被调用。
  3. QWindow仍然接受鼠标事件,甚至设置了setMouseGrabEnabled( false );
  4. 注意:我发现调用setMouseGrabEnabled( false );并不会阻止QWindow中的鼠标事件处理。

1 个答案:

答案 0 :(得分:3)

我找到了解决方案:

有必要在QWindow上安装事件过滤器并在那里处理事件(eventFilter)。

可以在QWidget(容器)上安装事件过滤器,但它在OS X上不起作用。可能这是Qt中的一个错误,因为在Win下一切都很好。