【问题标题】:Drag-n-drop with QWindow使用 QWindow 进行拖放
【发布时间】:2015-05-03 23:29:31
【问题描述】:

我有自定义 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
};

问题:如何处理 drop 事件(在哪里都无所谓)?

问题:

  1. QWindow 不提供用于拖放支持的虚拟方法。
  2. QWidget::dragEnterEventQWidget::dropEvent(和类似的)不会被调用。
  3. QWindow 仍然接受鼠标事件,即使 setMouseGrabEnabled( false ); 已设置。

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

【问题讨论】:

    标签: qt drag-and-drop


    【解决方案1】:

    我找到了解决办法:

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 2019-07-09
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多