使用Qt :: X11BypassWindowManagerHint标志时,窗口无法获得焦点

tom*_*pek 4 c++ qt

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

MainWindow window;
window.show();
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

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

问题1:什么是Qt::X11BypassWindowManagerHint真正做到?

问题2:我如何使这个工作?

tom*_*pek 6

所以我设法挖掘了文档.

问题1: Qt::X11BypassWindowManagerHint窗口中没有边框的结果,根本没有窗口管理器的控制(仅在X11!).

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