QWindow的拖放功能

4

我有一个自定义的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);

注意:我发现调用 setMouseGrabEnabled(false); 并不会阻止 QWindow 处理鼠标事件。

1个回答

3
我找到了一个解决方案:
需要在 QWindow 上安装事件过滤器并在那里处理事件(eventFilter)。
可以在 QWidget(容器)上安装事件过滤器,但在Mac OS X上无法运行。可能是Qt中的一个bug,因为在Windows下一切都很好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接