Qt隐藏任务栏图标

26

我有一个自定义QWidget,我不希望它显示在任务栏中。我有一个QSystemTrayIcon用于管理退出/最小化等操作。

4个回答

24

我认为您需要的是某种父占位符小部件。如果您创建小部件而没有父级,则它被视为顶级窗口。但是,如果您将其创建为顶级窗口的子级,则它被视为子窗口,并且不会获得任务栏条目。另一方面,父窗口也不会获得任务栏条目,因为您从未设置它可见:这里的代码对我有效:

class MyWindowWidget : public QWidget
{
public:
    MyWindowWidget(QWidget *parent)
        : QWidget(parent, Qt::Dialog)
    {

    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QMainWindow window;

    MyWindowWidget widget(&window);
    widget.show();

    return app.exec();
}

如果这是你打算的,那么任务栏中没有显示任何条目。


1
我在使用一个应用程序时遇到了这个问题,阅读后我意识到问题是由于某人使用了该对象创建。这对我来说是一个错误。我删除了“this”,应用程序完美地工作了,即任务栏条目回来了。谢谢你。 - Yash

14

只需为小部件设置Qt :: SubWindow标志。


这绝对是最简单的答案。使用Qt5对我很有效。 - TheSHEEEP
2
如果您的窗口没有框架,这是一个不错的解决方案。如果有框架,则不会有默认的窗口按钮(关闭、最大化、最小化)。 - Szpaqn
1
我应该把这段代码放在哪里?你能给一个更详细的例子吗? - GeneCode

9
如果您想在不在任务栏中显示小部件的情况下显示/隐藏该小部件,您可以检查该小部件的窗口标志。我不是100%确定,但我认为我使用了Qt :: Dialog | Qt :: ToolQt :: CustomizeWindowHint来实现这一点,但我的窗口也没有完全装饰。如果您尝试操作,请记住应用程序的退出策略。关闭/隐藏最后一个顶级窗口通常会退出应用程序,因此您可能需要调用QApplication :: setQuitOnLastWindowClosed(false)以防止这种情况发生...

5
Qt::Tool 是一个相关的标志,可以防止任务栏显示。 - ens
1
没事了,我搞定了:this->setWindowFlags(Qt::tool); - GeneCode
1
注意:在某些窗口管理器上,即使有父级窗口的子窗口也会显示在任务栏中。如其他地方所述,将窗口类型设置为Qt :: Tool可以解决此问题,但是某些窗口管理器不允许最大化工具窗口。如果您也需要这样做,您必须通过从X11Info获取X11连接手动发送“_NET_WM_STATE_SKIP_TASKBAR”。 - SleepProgger
1
@SleepProgger:我能够解决(或者说是绕过)一个类似的问题,多亏了你的评论:https://dev59.com/HH8QtIcB2Jgan1zn_OL0#75584018 - Marph

0

使用Python来实现:

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

class MainWindow(QWidget):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent, Qt.Tool)

window = MainWindow()
window.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接