键盘和鼠标事件透明小部件

时间:2010-01-06 07:43:28

标签: qt event-handling mouse transparency

当我点击一个按钮时我的主窗口我希望它对键盘和鼠标事件变得透明,即所有键盘和鼠标事件都应该传递到它下面的任何窗口,好像那个窗口不存在一样。

Qt::WA_TransparentForMouseEvents在这里不起作用,因为这只会使子窗口对键盘和鼠标事件透明。我的窗口是主窗口,我想将所有事件传递到桌面上的任何窗口而不仅仅是父窗口。

2 个答案:

答案 0 :(得分:2)

我在我的应用程序中一直使用Qt::WA_TransparentForMouseEvents,效果很好。

我不明白你面临的问题,但它应该有效。如果您仍然遇到问题设置归属Qt::WA_TransparentForMouseEventsQt::WA_Translucentbackground

答案 1 :(得分:2)

下面是示例代码,它使我可以进行绘图,鼠标事件仍可通过它。

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();
}