Как правильно запостить событие клика по рабочему столу (корневому окну)?

Рейтинг: 0Ответов: 2Опубликовано: 18.12.2014

Мне нужно написать приложение, которое парсит пиксель экрана при клике по любой позиции, ОС 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();
}
}

Проблема: при клике мыши по рабочему столу ничего не происходит, мышь не релизится, окно не разворачивается, что я делаю неправильно?

Есть ли альтернативные методы решения вопроса?

Ответы

Ответов пока нет.