Как правильно запостить событие клика по рабочему столу (корневому окну)?
Мне нужно написать приложение, которое парсит пиксель экрана при клике по любой позиции, ОС OpenSuse.
Есть расширенный класс корневого окна:
class DesktopMouseGrabber : public QDesktopWidget {
public:
QMainWindow* main_window;
DesktopMouseGrabber(QMainWindow *window_) : QDesktopWidget(), main_window(window_) {}
void mousePressEvent(QMouseEvent *e);
};
void DesktopMouseGrabber::mousePressEvent(QMouseEvent *e) { // событие клика по виджету
QApplication::postEvent(main_window, e);
}
И окно:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
start = false;
desktopWidget = QApplication::desktop();
m_grabber = static_cast<DesktopMouseGrabber*>(desktopWidget); // тип m_grabber DesktopMouseGrabber*
m_grabber->main_window = static_cast<MainWindow* (this); // тип m_grabber->main_window - QMainWindow*
m = this;
connect( ui->selectButton, SIGNAL(clicked()), this, SLOT(onButtonSelectClick()) );
connect( ui->startButton, SIGNAL(clicked()), this, SLOT(onButtonStartClick ()) );
}
// Нажимаем на кнопку, сворачиваем окно, делаем чтобы виджет корневого окна захватил мышь
void MainWindow::onButtonSelectClick() {
showMinimized();
m_grabber->grabMouse();
}
void MainWindow::customEvent(QEvent *e) { // Обработчик события клика по корневому окну
QMouseEvent* event = static_cast<QMouseEvent*>(e);
m_grabber->releaseMouse();
this->show();
}
}
Проблема: при клике мыши по рабочему столу ничего не происходит, мышь не релизится, окно не разворачивается, что я делаю неправильно?
Есть ли альтернативные методы решения вопроса?
Источник: Stack Overflow на русском