Правильное использование QProcess в Linux
Пишу главное окно, которое запускает внешние программы. При запуске внешней программы главное окно должно сворачиваться в трей, а при завершении внешнего процесса главное окно должно появиться на рабочем столе. На Windows работает так, как я ожидаю, но на Linux главное окно сворачивается в трей и появляется на рабочем столе вместе с внешней программой. Вот тестовый код.
mainwindow.h
#pragma once
#include <QMainWindow>
#include <QPushButton>
#include <QSystemTrayIcon>
#include <QProcess>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void execProcess();
void showTrayIcon();
void hideTrayIcon();
private:
QProcess *process;
QPushButton *button;
QSystemTrayIcon *tray;
};
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), process(new QProcess),
button(new QPushButton("Exec prog", this)),
tray(new QSystemTrayIcon(this))
{
QIcon icon;
icon.addFile(":/Icons/App36.png");
tray->setIcon(icon);
tray->hide();
connect(button, &QPushButton::clicked, this, &MainWindow::execProcess);
connect(process, &QProcess::started, this, &MainWindow::showTrayIcon);
connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, &MainWindow::hideTrayIcon);
}
MainWindow::~MainWindow()
{ }
void MainWindow::execProcess()
{
process->start("/usr/bin/yandex-browser");
}
void MainWindow::showTrayIcon()
{
tray->show();
this->hide();
}
void MainWindow::hideTrayIcon()
{
tray->hide();
this->show();
}