下午寫程序中遇到幾個小細節,需要在這里記錄一下。
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