Qt 带QWindow的拖放

Qt 带QWindow的拖放,qt,drag-and-drop,Qt,Drag And Drop,我有一个自定义QWidget,它包含自定义QWindowQWindow与OpenGL一起用作渲染框架和Qt应用程序之间的“连接器” 鼠标和键盘事件通过覆盖QWindow方法处理 伪代码: class MyWindow : public QWindow { public: MyWindow : QWindow() { /* GL stuff init*/ } protected: // mouse/keyboard event handling // expose event hand

我有一个自定义
QWidget
,它包含自定义
QWindow
<代码>QWindow与OpenGL一起用作渲染框架和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
};
问题:如何处理丢弃事件(无论在何处)

问题:

  • QWindow
    不提供拖放支持的虚拟方法
  • 未调用
    QWidget::dragEnterEvent
    QWidget::dropEvent
    (以及类似的)
  • QWindow
    仍然接受鼠标事件,甚至
    setmouseglabeled(false)已设置
  • 注意:我发现,
    setmouseglabeled的调用(false)
    不阻止在
    QWindow中处理鼠标事件

    我找到了一个解决方案:

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

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