QT打开外部程序Windows & Mac

本文介绍了如何在不同操作系统上(Windows和macOS)通过Qt应用启动外部程序的方法,并提供了使用bat脚本在Windows环境下实现这一功能的具体步骤。

一、在应用程序中打开外部程序

    QString qsPath = QCoreApplication::applicationDirPath();
#ifdef _WIN32
    qsPath += + "/user.exe";
	qsPath.replace("/", "\\");
    QProcess::startDetached(qsPath, QStringList());
#else // _WIN32
     qsPath += + "/user.app";
     QProcess proc;
     proc.start(qsPath, QStringList());
     proc.waitForFinished(-1);
#endif

1.、注意windows下QCoreApplication::applicationDirPath() 获取的路径是exe所在目录,

而mac下的程序会被打成

一个包,获取的目录是包内部的exe目录,需要显示包,然后吧外部的包放到包内部的exe目录中,

windows下需要把dll之类的全拷贝到exe目录下

2、windows下如果没有太多公用dll,建议单独建一个目录,方便以后进行升级之类的操作

这种方式会导致打开的进程会变为当前进程的字进程

二、windows下bat命令打开外部程序

1、打开的进程和当前的进程为独立进程

	// 选取一个能写入位置的路径
    QString batFile =  QStandardPaths::writableLocation(QStandardPaths::HomeLocation)+ QDir::separator() + "StartDaemon.bat";
	// 删除旧的文件
    if (QFile(batFile).exists())
	{
		QFile(batFile).remove();
	}
    // 写入新的文件
	QFile file(batFile);
	if (file.open(QFile::ReadWrite))
	{
		QString strParam = QString("@echo off \n start /d  \"%1\" HiDaemond.exe  \"%2\" \n exit").arg(QCoreApplication::applicationDirPath()).arg(QFileInfo(QCoreApplication::applicationFilePath()).fileName());
		file.write(strParam.toLocal8Bit());
		file.close();

        // 执行脚本
		QProcess p;
		p.start("cmd.exe", QStringList() << "/c" << batFile);
		if (p.waitForStarted())
		{
			p.waitForFinished(2000);
			return;
		}

2、解析命令

@echo off
start /d  "路径" 启动程序名 "需要传入的参数" 
exit

(1)、传入的参数对应argv[1],  QT中对应QApplication::arguments().at(1)

(2)、传入参数可以不需要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值