(请参阅编辑)

我正在开发GNOME下的QT/C ++应用程序。

应用程序主窗口和QListBox子窗口。

当我远离应用程序时,这两个窗口都显示为单独的主窗口。

我该如何制作它,以便当我(或以后的用户)使用alt-tab时仅显示一个窗口?

我猜想这种行为之所以出现,是因为一个主窗口不会夹住子窗口 - 子窗口扩展了主窗口的边界。 GNOME对于其他许多应用程序也具有不良的Alt-tab行为,与主窗口分开显示模态对话框。但是就我的应用程序而言,这确实很烦人。

我认为我可以制作一个巨大的透明窗口,其中包括现有窗口。但是找到一个“干净”解决方案会更好。

(最合乎逻辑的猜测确实是它与窗口标志有关。我尝试了我能想到的所有合理的标志组合。窗口类型已描述 这里)

编辑:该应用程序具有QWIDGET作为其主窗口(不是QMainWindow),QListView包含在Qwidget对象中,并通过将点传递到主窗口而创建。用QT ::工具| QT :: FramelessWindowHint。

edit2: QT :: X11BYPASSWINDOWMANAGERHINT风格 工作以从Alt-Tab列表中删除窗口。问题在于它还使窗口“未经管理”,因此覆盖了其他窗口。每当我失去焦点时,我都可以躲藏起来 - 现在奖励更好的解决方案。

有帮助吗?

解决方案

在为您的窗口创建窗口时 QListBox 窗口设置 Qt::Tool 其构造函数或以后的窗口标志 setWindowFlags 功能调用。这是一些代码段(我省略了标题):

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QMainWindow mw;
    mw.show();
    QWidget toolWindow(&mw, Qt::Window|Qt::Tool);
    QHBoxLayout layout(&toolWindow);
    toolWindow.setLayout(&layout);
    QListView lv(&toolWindow);
    layout.addWidget(&lv);
    toolWindow.show();

    return app.exec();
}

我已经在我的Debian SID框(Gnome 2.30,Metacity 2.30.1)上测试了此功能: image proof on answer to question #3553428.

如果这不是您想要的,请命名正确工作的软件,否则您可以自己检查。做这个运行 xprop 在终端窗口中,单击您感兴趣的窗口。输出将包含窗口标志。您感兴趣的是 _NET_WM_WINDOW_TYPE(ATOM). 。对于工具窗口(即未在alt-tab中列出),此标志是:

_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_UTILITY, _NET_WM_WINDOW_TYPE_NORMAL

如果带有这些标志的窗口不是工具箱窗口,那么您的窗口管理器有问题,或者您亲自设置了此类行为。

其他提示

您可以通过WMCTRL工具手工尝试。使用“ -r -b件”,您可以将net_wm参数修改为它。在[1]中尝试这些。

如果有效,则可以使用Xlib-calls添加它们(如果您从QT了解X11窗口号。我相信这是可能的)。

[1] http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top