gpt4 book ai didi

qt - 忽略 QWidget 单击事件并将其传播到操作系统

转载 作者:行者123 更新时间:2023-12-05 05:26:28 29 4
gpt4 key购买 nike

我有一个顶级的无父级 QWidget,在它上面我有一堆其他的 QWidgets(例如 QPushButton)。我想让我的 QWidget 表现得对鼠标事件透明。因此,当我点击 QWidget(但不是我的按钮)时,我希望我的窗口失去焦点并选择后面的东西(例如,Windows 资源管理器窗口,如果它恰好在后面我的窗口)。我还希望我的 QPushButton 继续处理鼠标事件。

这可能吗?我尝试在小部件上设置 Qt::WA_TranslucentBackgroundQt::WA_TransparentForMouseEvents 但是如果我在上面画一些东西,例如QGraphicsDropShadowEffect 小部件仍然在 QGraphicsDropShadowEffect 绘制的部分处理鼠标点击事件。

这可能吗?

问候!

最佳答案

我找到了一些解决方案。在我的例子中,这是指向 QMainWindow 的指针。主要思想:捕获点击,获取globalPos,隐藏窗口并将点击交给操作系统。但它应该是特定于操作系统的代码,我可以举一个在 Windows 上运行的例子。您应该创建 eventFilter(我希望您知道如何执行此操作,所以我发布了下一个代码)。

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if(obj == this && event->type() == QEvent::MouseButtonRelease)
{
qDebug() << "mouse";
QMouseEvent *mouse = static_cast<QMouseEvent*>(event);
qDebug() << mouse->globalPos();
QPoint point = mouse->globalPos();
this->hide();
//start of OS specific code
mouse_event(MOUSEEVENTF_LEFTDOWN,point.x(),point.y(),0,0);
mouse_event(MOUSEEVENTF_LEFTUP,point.x(),point.y(),0,0);
mouse_event(MOUSEEVENTF_LEFTDOWN,point.x(),point.y(),0,0);
mouse_event(MOUSEEVENTF_LEFTUP,point.x(),point.y(),0,0);
//this->show();//as you want
}

return QObject::eventFilter(obj, event);
}

在我的示例中,窗口将隐藏,我们模拟双击。在我的电脑上,我可以忽略 QMainWindow 并打开被 QMainWindow 关闭的图片(我看不到它,我只看到了我的 QMainWindow,但是点击被忽略了,我们把这次点击交给了操作系统)

关于qt - 忽略 QWidget 单击事件并将其传播到操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811521/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com