【发布时间】:2015-05-03 23:29:31
【问题描述】:
我有自定义 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
};
问题:如何处理 drop 事件(在哪里都无所谓)?
问题:
-
QWindow不提供用于拖放支持的虚拟方法。 -
QWidget::dragEnterEvent、QWidget::dropEvent(和类似的)不会被调用。 -
QWindow仍然接受鼠标事件,即使setMouseGrabEnabled( false );已设置。
注意:我发现setMouseGrabEnabled( false ); 的调用不会阻止QWindow 中的鼠标事件处理。
【问题讨论】:
标签: qt drag-and-drop