我有定制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/