カスタムQWidgetがあり、タスクバーに表示したくないだけです。終了/最小化などを管理するためのQSystemTrayIconがあります。
4 に答える
ここで必要なのは、ある種の親プレースホルダーウィジェットだけだと思います。親なしでウィジェットを作成した場合、それはトップレベルのウィンドウと見なされます。ただし、トップレベルウィンドウの子として作成した場合は、子ウィンドウと見なされ、タスクバーエントリ自体は取得されません。一方、親ウィンドウは、表示するように設定したことがないため、タスクバーエントリも取得しません。このコードは私にとっては機能します。
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();
}
意図したとおりの場合、タスクバーのエントリは表示されません。
ウィジェットにQt::SubWindowフラグを設定するだけです。
タスクバーにウィジェットを表示せずにウィジェットを表示/非表示にしたい場合は、そのウィジェットのウィンドウフラグを確認してください。100%確信はありませんが、使用したと思いますQt::Dialog
| Qt::Tool
そしてQt::CustomizeWindowHint
これを達成するために、しかし私の窓も完全に装飾されていませんでした。それで遊ぶ場合に覚えておくべきもう1つのことは、アプリケーションの終了ポリシーです。QApplication::setQuitOnLastWindowClosed(false)
最後のトップレベルウィンドウを閉じる/非表示にすると、通常はアプリケーションが終了するため、それを防ぐために呼び出す必要があるかもしれません...
これを達成するための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()