專案需要用QT程式打開另外一個批處理檔案(bat),并且要停留在控制臺界面上,效果和手動雙擊打開一樣就行。
我使用QProcess::startDetached打開時遇到比較奇怪的問題:
1. 當bat路徑中不存在左括號“(”時,無論有沒有空格都能打開控制臺;
2. 當bat路徑中存在左括號“(”時,且存在空格能打開控制臺;
3. 當bat路徑中存在左括號“(”時,且不存在空格控制臺一閃而過。
程式如下:
//QString runPath = "D:\\test\\test.bat"; // 控制臺打開成功
//QString runPath = "D:\\test( test\\test.bat"; // 控制臺打開成功
//QString runPath = "D:\\test(test\\test.bat"; // 控制臺一閃而過
QFileInfo exeFile(runPath);
if (exeFile.isFile())
{
QString workDir = exeFile.absolutePath().replace("/", "\\");
qint64 pid = 0;
qDebug() << runPath;
qDebug() << workDir;
bool pass = QProcess::startDetached(runPath, QStringList(), workDir, &pid);
if (!pass) // 回傳都是true
{
qDebug() << "fail";
return ;
}
}
return;
嘗試過用system打開bat檔案,發現帶括號也會一閃而過,神煩。。。
有沒有大神遇到過類似問題?
uj5u.com熱心網友回復:
測驗用的test.bat內容如下:
echo "測驗bat檔案"
pause
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
沒有人遇到過這問題嗎?uj5u.com熱心網友回復:
直接呼叫 cmd 即可QString runPath = "C:\\Windows\\System32\\cmd.exe";
QStringList sss;
sss << "/k" << " D:\\test\\test.bat";
bool pass = QProcess::startDetached(runPath, sss);
uj5u.com熱心網友回復:
另外 路徑里有空格的 需要前后加 引號。QString runPath = "\"”D:\\test( test\\test.bat\""
uj5u.com熱心網友回復:
如果是正常的路徑用哪種方式都沒有問題,我上面的問題是路徑中帶有左括號就有問題。比如:
runPath = "D:\\test\\test(test).bat";
uj5u.com熱心網友回復:
遇到同樣的問題。 用startDetached想打開控制臺界面。 官方檔案說5.8之后。 startDetached不再打開控制臺界面, 用了里面一個例子說是這樣可以打開控制臺界面 但試了沒用
QProcess p;
p.setProgram("cmd.exe");
p.setArguments({"/k", "echo", "Hello from Qt!"});
p.setCreateProcessArgumentsModifier([] (QProcess::CreateProcessArguments *args) {
args->flags &= ~CREATE_NO_WINDOW;
});
p.startDetached();
https://bugreports.qt.io/browse/QTBUG-57687
請問樓主解決了嘛!求問
(沒水。 管理員別刪了)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/120868.html
標籤:Qt
上一篇:mpvue實作左右聯動滾動的問題
下一篇:???
