3
我有自定義QWidget
,其中包含自定義QWindow
。使用OpenGL的QWindow
被用作渲染框架和Qt應用程序之間的「連接器」。使用QWindow進行拖放
鼠標和鍵盤事件通過重寫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
中處理鼠標事件。