Прозрачный виджет событий клавиатуры и мыши - PullRequest
1 голос
/ 06 января 2010

Когда я нажимаю кнопку в моем главном окне, я хочу, чтобы она стала прозрачной для событий клавиатуры и мыши, т. Е. Все события клавиатуры и мыши должны передаваться любым окнам под ней, как если бы этого окна там не было.

Qt::WA_TransparentForMouseEvents здесь не работает, так как это делает дочерние окна прозрачными для событий клавиатуры и мыши, я полагаю. И мое окно - главное окно, и я хочу передать все события любому окну на рабочем столе, а не только родительскому окну.

Ответы [ 2 ]

2 голосов
/ 07 января 2010

Вот пример кода, который позволяет мне рисовать, а события мыши проходят через него.

Sample::Sample(QWidget *pParent):QWidget(pParent)
{
    setAttribute(Qt::WA_TranslucentBackground);
    setAttribute(Qt::WA_TransparentForMouseEvents);
    setWindowFlags(Qt::FramelessWindowHint);
    QDesktopWidget qDesktopWidget;
    QRect screenSize = qDesktopWidget.screenGeometry();
    setGeometry(screenSize);
}

Sample::~Sample()
{
}

void Sample::paintEvent(QPaintEvent*)
{
    QDesktopWidget new QDesktopWidget();
    QRect rectangle = qDesktopWidget->screenGeometry();
    setGeometry(rectangle);

    const QPoint points[5] = {
        QPoint(0, 20),
        QPoint(rectangle.width(), 20),
        QPoint(rectangle.width(), rectangle.height()),
        QPoint(0,rectangle.height()),
        QPoint(0, 0)
    };

    QPen pen(Qt::blue, 10, Qt::SolidLine, Qt::SquareCap);
    QPainter painter(this);
    painter.setPen(pen);
    painter.drawPolyline(points, 5);
    painter.end();
}
2 голосов
/ 06 января 2010

Я использовал Qt::WA_TransparentForMouseEvents в своем приложении, и оно прекрасно работает.

Я не понимаю проблемы, с которой вы сталкиваетесь, но она должна работать. Если у вас все еще есть проблема, установите атрибут Qt::WA_TransparentForMouseEvents и Qt::WA_Translucentbackground.

...