1.概要
1.基本需求:ubuntu qt c++ 创建两个程序a和b,a启动后,有个按钮点击后,打开b程序,并将a的可执行文件的完整路径传递给b,且把a的程序关闭了, b关闭的时候,依据a传递过来的路径,在把a启动起来。
2.内容
a进程
#include "MainWindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
// ============== 程序A (mainwindow.cpp) ==============
#include <QMainWindow>
#include <QProcess>
#include <QPushButton>
#include <QCoreApplication>
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
QPushButton *btn = new QPushButton("启动程序B", this);
connect(btn, &QPushButton::clicked, this, &MainWindow::startProgramB);
resize(200, 100);
}
private slots:
void startProgramB() {
// 获取当前可执行文件完整路径
QString aPath = QCoreApplication::applicationFilePath();
QString bPath = "D:\\projects\\qts\\untitled8\\build\\Desktop_Qt_6_7_2_MinGW_64_bit-Debug\\untitled8.exe";
// 启动程序B并传递参数
QProcess::startDetached(bPath, {aPath});
// 关闭当前程序
QCoreApplication::quit();
}
};

b程序
// ============== 程序B (main.cpp) ==============
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
#include <QTimer>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
// 注册退出时的处理
QObject::connect(&a, &QCoreApplication::aboutToQuit, [&]() {
if (argc > 1) {
QString aPath = argv[1];
qDebug() << "正在重新启动程序A:" << aPath;
QProcess::startDetached(aPath, {});
}
});
// 模拟程序运行(实际应替换为你的业务逻辑)
qDebug() << "程序B已启动,3秒后退出...";
//QTimer::singleShot(3000, &a, &QCoreApplication::quit);
return a.exec();
}
1041

被折叠的 条评论
为什么被折叠?



