如何使用QT呼叫外部可執行程式
阿新 • • 發佈:2019-02-04
在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複製命令,由於QProcess為C++的類,所以還涉及到在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++函式的呼叫了