我有一个自定义的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
};
问题:如何处理拖放事件(无论在哪里)?
问题:
QWindow
没有提供虚拟方法来支持拖放。QWidget::dragEnterEvent
,QWidget::dropEvent
(以及类似的方法)不会被调用。QWindow
仍然接受鼠标事件,即使设置了setMouseGrabEnabled(false);
。
注意:我发现调用 setMouseGrabEnabled(false);
并不会阻止 QWindow
处理鼠标事件。