QT开发中文网

Qt C++ windows 通过点击按钮,单独启动线程去触发exe进程启动,界面会被新启动程序覆盖,如何让点击按钮界面一直在上层

在 Windows 平台上,如果你希望在点击按钮启动一个新的 EXE 程序的同时,让当前应用程序窗口保持在最上层,你可以使用 Windows API 来实现。具体方法是调用 SetWindowPos 函数设置当前窗口的 Z 顺序。

下面是一个简单的示例,展示了如何创建一个 Qt 应用程序,在点击按钮时启动另一个 EXE,并确保当前应用程序窗口保持在最前面。

示例代码

#include <QApplication>
#include <QPushButton>
#include <QProcess>
#include <QWidget>
#include <Windows.h>

class MyWindow : public QWidget {
    Q_OBJECT

public:
    MyWindow(QWidget *parent = nullptr) : QWidget(parent) {
        QPushButton *button = new QPushButton("Start Process", this);
        connect(button, &QPushButton::clicked, this, &MyWindow::startProcess);
        
        setFixedSize(200, 100); // 设置固定大小
    }

private slots:
    void startProcess() {
        // 启动新进程
        QProcess::startDetached("path_to_your_exe.exe"); // 替换为你的 EXE 路径
        
        // 将当前窗口置于最上层
        HWND hwnd = (HWND)this->winId(); // 获取窗口句柄
        SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
    }
};

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    MyWindow window;
    window.setWindowTitle("Main Window");
    window.show();

    return a.exec();
}

#include "main.moc"

代码说明

  1. 包含头文件:我们需要包含 <Windows.h> 来使用 Windows API。
  2. startProcess 方法
    • 使用 QProcess::startDetached() 启动外部 EXE 程序。
    • 然后,我们获取当前窗口的句柄并调用 SetWindowPos(),将其设置为最上层窗口(HWND_TOPMOST)。
  3. 标志
    • 使用 SWP_NOMOVE | SWP_NOSIZE 保持位置和大小不变,只改变 Z 顺序。

注意事项

  • 确保替换 "path_to_your_exe.exe" 为你要启动的实际 EXE 文件路径。
  • 调用 SetWindowPos() 可以使得当前应用程序保持在最上层,但请注意,如果用户手动调整其它窗口,这种状态可能会被打破。
  • 此外,根据你的需求,可以考虑在适当的时候恢复原来的 Z 顺序,以便用户可以正常访问其它窗口。

这样就可以实现点击按钮后启动其他程序,同时保持主界面一直显示在最前面。如果有更多问题,请随时询问!


内容由零声教学AI助手提供,问题来源于学员提问

目录导航
  • 示例代码
  • 代码说明
  • 注意事项
  • 本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
    转载请注明出处:https://qt.0voice.com/?id=13166

    分享:
    扫描分享到社交APP
    上一篇
    下一篇
    发表列表
    游客 游客
    此处应有掌声~
    评论列表

    还没有评论,快来说点什么吧~

    联系我们

    在线咨询: 点击这里给我发消息

    微信号:3007537140

    上班时间: 10:30-22:30

    关注我们
    x

    注册

    已经有帐号?