Qt 打開文件夾並選中文件(Win32API QProcess)

 在網上查了許多資料,現在把兩種方式都總結一下:

//Win32 API方式

QDir dir(qstring_fileDir)    //qstring_fileDir  文件路徑

Qstring FileShellCommand = dir.absoluteFilePath(qstring_filename) //qstring_filename 文件名

FileShellCommand.replace("/", "\\");    //win32下替換斜槓

FileShellCommand.append("/select,"); 
ShellExecuteW(NULL, _T("open"), _T("Explorer.exe"), FileShellCommand.toStdWString().c_str(), NULL, SW_SHOWDEFAULT);

可以直接調用windows內置函數,關於這個函數的使用網上有很多優秀講解,在這裏重要說下函數的返回值,此函數返回HINSTANCE類型,大於32則說明打開成功。其實相當於調用了一次cmd,可以在powershell下多嘗試幾次


//QProcess方式

QDir dir(qstring_fileDir)    //qstring_fileDir  文件路徑

Qstring FileShellCommand = dir.absoluteFilePath(qstring_filename) //qstring_filename 文件名

FileShellCommand.replace("/", "\\");    //win32下替換斜槓

QProcess process;
process.startDetached("explorer", QStringList() << QString("/select,") << QString("%1").arg(FileShellCommand));
process.waitForFinished();

使用Qprocess需要注意一下幾點:

1.process.startDetached是fork了一個子進程啓動外部程序,不過子進程與父進程脫離了父子關係

2.QProcess調用外部命令是不允許路徑帶空格的,類似於C:\Program Files這樣的,因爲qt是根據空格來解析命令的,所以會造成歧義導致失敗,這時候就需要QStringList來幫忙了,如上圖代碼,將"/select,"和文件路徑名當作參數傳遞給Process執行,這樣就可以萬無一失的打開文件夾並選中文件了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章