我有包含自定义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仍然接受鼠标事件,甚至设置了setMouseGrabEnabled( false );。注意:我发现setMouseGrabEnabled( false );的调用不会阻止QWindow中的鼠标事件处理。
发布于 2015-03-03 12:34:04
我找到了一个解决办法:
有必要在QWindow和process (eventFilter)上安装事件过滤器。
在QWidget (容器)上安装事件过滤器是可能的,但它在OS上不起作用。这可能是Qt中的一个bug,因为在Win下一切都很好。
https://stackoverflow.com/questions/28829679
复制相似问题