qt - 拖放窗口

标签 qt drag-and-drop

我有定制QWidget包含自定义 QWindow . QWindow with 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仍然接受鼠标事件,甚至 setMouseGrabEnabled( false );设置。

  • 注意:我发现了 setMouseGrabEnabled( false ); 的电话在 QWindow 中不会阻止鼠标事件处理.

    最佳答案

    我找到了一个解决方案:

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

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

    关于qt - 拖放窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28829679/

    相关文章:

    c++ - DOM 解析器中的 SetContent 错误

    Android/kindle 拖拽时偶尔卡顿

    C++ 与 Qt 编译失败

    c++ - 使用Qt拖放: Knowing target application on hover - is it possible?

    c# - 拖动时比较 WinForms 控件位置

    javascript - 拖放的拖动事件与鼠标事件

    java - 将图标拖放到主屏幕

    google-chrome - GWT native 拖放 : no data in DragOverHandler

    c++ - QTest 和 void 函数

    c++ - Qt简单记事本,QmainWindow状态栏打印行号