【问题标题】:Window doesn't get focus when using Qt::X11BypassWindowManagerHint flag使用 Qt::X11BypassWindowManagerHint 标志时窗口没有获得焦点
【发布时间】:2015-10-20 18:35:20
【问题描述】:

我需要创建一个窗口,它始终保持在顶部,没有边框和控件。所以我这样做了:

MainWindow window;
window.show();

MainWindow 类如下所示:

MainWindow::MainWindow(QWidget *parent) : QWidget(parent, 
Qt::Window | Qt::WindowStaysOnTopHint 
| Qt::X11BypassWindowManagerHint | Qt::FramelessWindowHint) {

}

void MainWindow::keyPressEvent(QKeyEvent *event){
    if(event->key() == Qt::Key_Escape){
        QApplication::exit();
    } else
        QWidget::keyPressEvent(event);
}

这很有效,但并不完美。程序启动后,windows没有焦点,所以你必须先点击它。如果我删除Qt::X11BypassWindowManagerHint,windows会获得焦点,但它不会在所有工作区(桌面)显示。

问题 1:Qt::X11BypassWindowManagerHint 究竟做了什么?

问题 2:我如何让它发挥作用?

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    所以我设法浏览了文档。

    问题 1:Qt::X11BypassWindowManagerHint 导致窗口没有边框,并且根本无法从窗口管理器中进行控制(仅在 X11 上!)。

    问题2:要获得焦点并启用键盘输入,需要调用QWidget::activateWindow()。

    【讨论】:

    • 在wayland平台,收到此消息“qt.qpa.wayland: Wayland不支持QWindow::requestActivate()”。然后在调用 QGuiApplication::focusWindow() 时它返回 null。这似乎与所提出的问题有关。你能帮忙吗?
    猜你喜欢
    • 2011-03-10
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2011-08-04
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多