1. 程式人生 > >如何使用QT呼叫外部可執行程式

如何使用QT呼叫外部可執行程式

在QT中呼叫外部可執行程式,如exe等。在本例中我們使用QT的QProcess類呼叫Git Bash中的命令,(在我們專案中需要呼叫一個bash命令,所以將命令寫在.sh檔案中,但是MAC中雙擊.sh檔案並不能執行,修改方法是將檔案字尾改為.command,解決方法連線:https://forums.macrumors.com/threads/execute-a-sh-script-by-double-click.213726/),檢視QT的幫助文件:
這裡寫圖片描述

在本例中,我們需要呼叫bash命令中的cp複製命令,由於QProcessC++的類,所以還涉及到在QML中呼叫C++中的函式。

widget.h
#include<QWidget>
#include<QObject> #include<QProcess> class FcpUrl:public QObject //必須繼承自QOject { Q_OBJECT publice: explicit FcpUrl(); Q_INVOKABLE void Cpbundle(QString a,QString b, bool isDelete)//isDelete表示當已存在複製物件的時候是否刪除後貼上,或者直接不貼上 ~FcpUrl(); }
widget.cpp
FcpUrl::FcpUrl():QObject(){}
void FcpUrl::cpBundles
(QString a,QString b,bool isDelete){ bool isRemove = false QDir director(b); if(directory.exits()&&isDelete){isRemove = directory.removeRecursively();} else if(directory.exits()&&!isDelete){isRemove =false;} else isRemove = true; if(isRemove){ QString program = "cp";//bash的cp命令 QString s1 =
"/Users/Documents/p1"; QString s2 = "/Users/Documents/p2";//構成cp -R p1 p2這種形式,一定要是絕對路徑 QStringList arguments; arguments<<"-R"<<p1<<p2; QProcess *myProcess = new QProcess(); myProcess->start(program,arguments); myProcess->waitForFinished();//需要等到複製結束 } }
main.cpp
#include"widget.h"
#include<QApplication>
#include<QQuickView>
#include<QQmlEngine>
#include<QQmlContext>
int main(){
QApplication a();
QQuickView view;
FcpUrl w;
view.engine()->rootContext()->setContextProperty("w",&w);
view.setSource(QUrl("qrc:/qml/cp.qml"))//qml檔案,這裡需要將qml檔案新增到資原始檔.qrc中,即Resource檔案中,(注意.Pro工程中可能需要新增一些東西,具體忘了)
}

然後就可以在QML檔案中進行C++函式的呼叫了