c++ - 如何将 qprocess 带到最前面?
问题描述
工作环境:C++,窗口 我使用 qprocess 打开了一个 matlab 独立应用程序(xx.exe)。当用户按下按钮时,我想将 xx.exe 带到前面。如何使用 Qprocess 将 xx.exe 置于最前面?
解决方案
也许QProcess::startDetached()
会对您有所帮助(在我的情况下,此方法会激活窗口)。但我认为窗口操作(如activate、minimize、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;
找到其他值
推荐阅读
- c# - MVC 5 / .Net 框架与 Unity IoC - 注册 ILogger
- xcode - 是否可以为 Xcode 文件模板使用自定义图标?
- mysql - MySql:嵌套表可能吗?
- office365 - Power BI 导出到 PDF 自动化
- powershell - 获取内容拆分,但保留前导零并仅在 powershell 中按第一个“_”拆分
- python - Celery ConnectionResetError:[Errno 104] 对等方重置连接
- datagrip - 与 [主机名] 的连接失败。主机 [主机名] 未知。[08001] 连接尝试失败
- swift - 在协议中使用 self in function
- haskell - 在 Haskell 中创建新的有界数数据类型
- javascript - 为什么 Array.prototype.sort() 在 Chrome 开发工具中不起作用?