У меня есть таможня QWidget
, которая содержит пользовательские QWindow
. QWindow
с OpenGL используется как «соединитель» между средой рендеринга и приложением Qt.Drag-n-drop с 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
.