Qt 带QWindow的拖放
我有一个自定义Qt 带QWindow的拖放,qt,drag-and-drop,Qt,Drag And Drop,我有一个自定义QWidget,它包含自定义QWindowQWindow与OpenGL一起用作渲染框架和Qt应用程序之间的“连接器” 鼠标和键盘事件通过覆盖QWindow方法处理 伪代码: class MyWindow : public QWindow { public: MyWindow : QWindow() { /* GL stuff init*/ } protected: // mouse/keyboard event handling // expose event hand
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
仍然接受鼠标事件,甚至setmouseglabeled(false)代码>已设置
setmouseglabeled的调用(false)
不阻止在QWindow中处理鼠标事件
我找到了一个解决方案:
有必要在QWindow
上安装事件过滤器,并在那里处理事件(eventFilter
)
可以在QWidget
(容器)上安装事件过滤器,但它在OS X上不起作用。这可能是Qt中的一个错误,因为在Win下一切正常