У меня есть небольшое приложение, которое я хочу свернуть в системный лоток, и у меня есть код, который создает значок и минимизирует его в системном лотке при нажатии кнопки (специально я не хотел перезаписывать операцию закрытия по умолчанию).
Однако я не знаю, как получить свой корневой объект из qml, поэтому я не могу выполнить никаких действий, и когда я его получу, какого типа это будет?
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
manager = Manager()
ctx = engine.rootContext()
ctx.setContextProperty("Manager", manager)
engine.load('main.qml')
if not engine.rootObjects():
sys.exit(-1)
app.setWindowIcon(QtGui.QIcon('ico.png'))
sys.exit(app.exec_())
class Manager(QObject):
def __init__(self):
QObject.__init__(self)
self.tray_icon = QSystemTrayIcon(self)
Теперь следующий код, который я заставил "работать" в моем приложении, даже если он не работает должным образом.
self.tray_icon.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
show_action = QAction("Show", self)
quit_action = QAction("Exit", self)
hide_action = QAction("Hide", self)
show_action.triggered.connect(self.show)
hide_action.triggered.connect(self.hide)
quit_action.triggered.connect(qApp.quit)
tray_menu = QMenu()
tray_menu.addAction(show_action)
tray_menu.addAction(hide_action)
tray_menu.addAction(quit_action)
self.tray_icon.setContextMenu(tray_menu)
self.tray_icon.show()
def minimize(self):
self.hide()
print("Test")
_translate = QtCore.QCoreApplication.translate
#self.hide()
self.tray_icon.showMessage(
"Tray Program",
"Application was minimized to Tray",
QSystemTrayIcon.Information,
2000
)
единственное, что я сделал, я изменил
class Manager(QObject): to (QMainWindow)
и я мог бы использовать этот код, но вместо того, чтобы манипулировать своим окном, я получил полностью новое окно, тем не менее, я получил нормальный значок на панели задач и все элементы меню, которые мне были нужны.
Итак, суть в том, как я могу получить ссылку на свой корень и как я могу использовать на нем сворачивание в трей.
корень моего QML - это обычный ApplicationWindow.
Небольшое изменение, которое я видел на некоторых примерах C ++, которые они использовали,
root = engine.rootObjects().at(0);
но это больше не работает, как я видел. но я не нашел подобного пути.