久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何“在 Finder 中顯示"或“在資源管理器中顯

How to quot;Reveal in Finderquot; or quot;Show in Explorerquot; with Qt(如何“在 Finder 中顯示或“在資源管理器中顯示與 Qt)
本文介紹了如何“在 Finder 中顯示"或“在資源管理器中顯示"與 Qt的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

是否可以在 Windows 資源管理器/OS X Finder 中打開一個文件夾,然后選擇/突出顯示該文件夾中的一個文件,并以跨平臺方式執行此操作?現在,我做類似的事情

Is it possible to open a folder in Windows Explorer/OS X Finder and then select/highlight one file in that folder, and do it in a cross platform way? Right now, I do something like

QDesktopServices::openUrl( QUrl::fromLocalFile( path ) );

其中 path 是我要打開的文件夾的完整路徑.顯然,這只會打開文件夾,我必須手動追蹤我需要的文件.當該文件夾中有數千個文件時,這有點問題.

where path is a full path to folder I want to open. Obviously, this will just open the folder, and I'll have to track down the file I need manually. This is a bit of a problem when there are thousands of files in that folder.

如果我將其設置為該文件夾中特定文件的路徑,則該文件將使用該 MIME 類型的默認應用程序打開,這不是我所需要的.相反,我需要相當于在 Finder 中顯示"或在資源管理器中顯示"的功能.

If I make it a path to specific file in that folder, then that file is open with default application for that mime type, and that is not what I need. Instead, I need the functionality equivalent to "Reveal in Finder" or "Show in Explorer".

推薦答案

Qt Creator (source)這個功能,簡單復制一下:

Qt Creator (source) has this functionality, it's trivial to copy it:

void FileUtils::showInGraphicalShell(QWidget *parent, const QString &pathIn)
{
    const QFileInfo fileInfo(pathIn);
    // Mac, Windows support folder or file.
    if (HostOsInfo::isWindowsHost()) {
        const FileName explorer = Environment::systemEnvironment().searchInPath(QLatin1String("explorer.exe"));
        if (explorer.isEmpty()) {
            QMessageBox::warning(parent,
                                 QApplication::translate("Core::Internal",
                                                         "Launching Windows Explorer Failed"),
                                 QApplication::translate("Core::Internal",
                                                         "Could not find explorer.exe in path to launch Windows Explorer."));
            return;
        }
        QStringList param;
        if (!fileInfo.isDir())
            param += QLatin1String("/select,");
        param += QDir::toNativeSeparators(fileInfo.canonicalFilePath());
        QProcess::startDetached(explorer.toString(), param);
    } else if (HostOsInfo::isMacHost()) {
        QStringList scriptArgs;
        scriptArgs << QLatin1String("-e")
                   << QString::fromLatin1("tell application "Finder" to reveal POSIX file "%1"")
                                         .arg(fileInfo.canonicalFilePath());
        QProcess::execute(QLatin1String("/usr/bin/osascript"), scriptArgs);
        scriptArgs.clear();
        scriptArgs << QLatin1String("-e")
                   << QLatin1String("tell application "Finder" to activate");
        QProcess::execute(QLatin1String("/usr/bin/osascript"), scriptArgs);
    } else {
        // we cannot select a file here, because no file browser really supports it...
        const QString folder = fileInfo.isDir() ? fileInfo.absoluteFilePath() : fileInfo.filePath();
        const QString app = UnixUtils::fileBrowser(ICore::settings());
        QProcess browserProc;
        const QString browserArgs = UnixUtils::substituteFileBrowserParameters(app, folder);
        bool success = browserProc.startDetached(browserArgs);
        const QString error = QString::fromLocal8Bit(browserProc.readAllStandardError());
        success = success && error.isEmpty();
        if (!success)
            showGraphicalShellError(parent, app, error);
    }
}

另一篇相關的博文(代碼比較簡單,我沒試過所以無法評論),是這個.

Another, related blog post (with simpler code, I haven't tried it so I can't comment), is this.

Windows 上 pathIn 包含空格時,原始代碼中存在錯誤.QProcess::startDetached 會自動引用包含空格的參數.但是,Windows 資源管理器不會識別用引號括起來的參數,而是會打開默認位置.在 Windows 命令行中自行嘗試:

There is a bug in the original code when pathIn contains spaces on Windows. QProcess::startDetached will automatically quote a parameter if it contains spaces. However, Windows Explorer will not recognize a parameter wrapped in quotes, and will open the default location instead. Try it yourself in the Windows command line:

echo. > "C:a file with space.txt"
:: The following works
C:Windowsexplorer.exe /select,C:a file with space.txt  
:: The following does not work
C:Windowsexplorer.exe "/select,C:a file with space.txt"

因此,

QProcess::startDetached(explorer, QStringList(param));

改為

QString command = explorer + " " + param;
QProcess::startDetached(command);

這篇關于如何“在 Finder 中顯示"或“在資源管理器中顯示"與 Qt的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How can I read and manipulate CSV file data in C++?(如何在 C++ 中讀取和操作 CSV 文件數據?)
In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,為什么我不能像這樣編寫 for() 循環: for( int i = 1, double i2 = 0;)
How does OpenMP handle nested loops?(OpenMP 如何處理嵌套循環?)
Reusing thread in loop c++(在循環 C++ 中重用線程)
Precise thread sleep needed. Max 1ms error(需要精確的線程睡眠.最大 1ms 誤差)
Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?環形?)
主站蜘蛛池模板: 99久久国产综合精品麻豆 | 欧美一级欧美三级在线观看 | 国产成人精品久久二区二区91 | 国产亚洲欧美日韩精品一区二区三区 | 精品国产第一区二区三区 | 夜夜骑首页 | 亚洲一区二区三区四区五区午夜 | 午夜久久久久久久久久一区二区 | 日韩成人国产 | 伊人狼人影院 | 欧美视频三区 | 日韩中文字幕一区 | 欧美极品在线 | 国产精品视频网 | 99re视频在线观看 | 亚洲一区二区在线视频 | 国产在线精品一区二区三区 | 午夜影院操 | 久久久精品 | 成人免费视频网站在线看 | 欧美一级视频免费看 | 福利视频网站 | 日韩羞羞 | 国产美女精品视频 | 成人免费三级电影 | 日韩在线成人 | 国内自拍视频在线观看 | 免费激情 | 精品成人在线视频 | 色视频免费 | 日韩黄a| 在线一区视频 | 亚洲成人福利视频 | 国产真实乱对白精彩久久小说 | 二区在线观看 | 中文字幕av网站 | 欧美自拍网站 | 精品久久久久久国产 | 国产精品一区视频 | 国产成人精品a视频一区www | 亚洲一区视频在线 |