Qt打開外部程序和文件夾需要注意的細節(注意QProcess的空格問題,以及打開本地文件時,需要QUrl::fromLocalFile才可以)


下午寫程序中遇到幾個小細節,需要在這里記錄一下。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
QProcess *process = new QProcess( this );
     QFileInfo fileinfo(appUrl);
 
     QString appPath = QApplication::applicationDirPath()+SAVEDIR+ "/" +fileinfo.fileName();
     bool res = process->startDetached(appPath,QStringList());
     if (res)
     {
         accept();
     }
     else
     {
         MyHelper::ShowMessageBoxError( "下載完成但自動升級失敗,請手工安裝升級包!" );
         QDesktopServices::openUrl(QUrl::fromLocalFile(QApplication::applicationDirPath()+SAVEDIR));
         reject();
     }
  • 細節1:

原本代碼中是這樣寫的:
process->startDetached(appPath);
測試環境沒任何問題,但是生產環境卻不能調用外部程序,最終發現生產環境的文件路徑在
C:\Program Files (x86)\...帶有空格,造成調用失敗,於是google之后嘗試
process->startDetached(appPath,QStringList());
問題得到解決。

  • 細節2:

QDesktopServices::openUrl(QUrl(QApplication::applicationDirPath()+SAVEDIR));
這地方同樣存在這樣的問題,如果使用QUrl::fromLocalFile進行處理,就可以正常打開文件夾:
QDesktopServices::openUrl(QUrl::fromLocalFile(QApplication::applicationDirPath()+SAVEDIR));

除此之外,還有一個和這段代碼無關的問題:Qt調用VC寫的動態庫,VC需要用C的方式輸出函數,否則MinGW32編譯過程會報錯,即:
VC DLL頭文件示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef CDOUBLEREADERDLL 
#ifdef CDOUBLEREADERDLL_EXPORTS
#define CDOUBLEREADERDLL extern "C" __declspec(dllexport)
#else
#define CDOUBLEREADERDLL extern "C" __declspec(dllimport)
#endif
#endif
  
# define BUFFERSIZE 20
# define READTIMEOUT 1000
// 打開串口
CDOUBLEREADERDLL bool _stdcall  RD_Open( int iPort,unsigned long iBaudRate);
...

Qt中調用示例:

?
1
2
3
4
extern "C"
{
     #include "drivers/CdoubleReaderDll.h"
}

轉載請注明:梧桐樹下 » Qt打開外部程序和文件夾需要注意的細節

 

http://www.pfeng.org/archives/808


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM