Как вывести qprocess на фронт? - PullRequest
       18

Как вывести qprocess на фронт?

0 голосов
/ 11 апреля 2019

Рабочая среда: C ++, окно Я открыл автономное приложение Matlab (xx.exe), используя qprocess. Когда пользователь нажимает кнопку, я хочу вывести xx.exe на передний план. Как я могу вывести xx.exe на фронт, используя Qprocess?

1 Ответ

1 голос
/ 11 апреля 2019

Может быть, QProcess::startDetached() поможет вам (в моем случае этот метод активирует окно).Но манипулирование окнами (например, , активация , сведение к минимуму , hide ) - это проблема ОС, я думаю.Поэтому в большинстве случаев вы должны запросить ОС для манипулирования окнами.

Вот небольшой пример для Windows, который вы можете попробовать

WindowsUtils.h

class WindowsUtils
{
public:
    WindowsUtils();

    static bool ShowWindow(const qint64& pidQt);
    static bool MinimizeWindow(const qint64& pidQt);
    static bool RestoreWindow(const qint64& pidQt);
};

WindowsUtils.cpp

#include "WindowsUtils.h"
#include <windows.h>

int g_winState = SW_SHOW;

BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
    // get the window process ID
    DWORD searchedProcessId = (DWORD)lParam;
    DWORD windowProcessId = 0;
    GetWindowThreadProcessId(hWnd,&windowProcessId);

    // check the process id match
    if (windowProcessId == searchedProcessId){
        ShowWindow(hWnd, g_winState);
        return FALSE;
    }

    return TRUE;  //continue enumeration
}

WindowsUtils::WindowsUtils()
{

}

bool WindowsUtils::ShowWindow(const qint64 &pidQt)
{
    g_winState = SW_SHOW;
    return EnumWindows(EnumWindowsProc, (LPARAM)pidQt);
}

bool WindowsUtils::MinimizeWindow(const qint64 &pidQt)
{
    g_winState = SW_MINIMIZE;
    return EnumWindows(EnumWindowsProc, (LPARAM)pidQt);
}

bool WindowsUtils::RestoreWindow(const qint64 &pidQt)
{
    g_winState = SW_RESTORE;
    return EnumWindows(EnumWindowsProc, (LPARAM)pidQt);
}

Использование

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

    void on_pushButton_5_clicked();

private:
    Ui::MainWindow *ui;
    qint64 m_pid;
};

void MainWindow::on_pushButton_3_clicked()
{
    m_pid = 0;
    QProcess::startDetached("notepad.exe", QStringList(), QString(), &m_pid);
}

void MainWindow::on_pushButton_4_clicked()
{
    WindowsUtils::RestoreWindow(m_pid);
}

void MainWindow::on_pushButton_5_clicked()
{
    WindowsUtils::MinimizeWindow(m_pid);
}

Другие значения для int g_winState; вы найдете здесь

...