当前位置: 动力学知识库 > 问答 > 编程问答 >

c++ - Qt: How to open file by external programm, "open with..." dialog

问题描述:

How can I open a file by associated, external program and if it fails call a "open with..." dialog?

Can it be platform independent code? Or I need to use

#ifdef

#else

#endif

constructions to implement "open with..." dialog call for every platform?

Thanks in advance

EDIT: Update, after few hours of researching, i found good solution for Windows.

We try to open file with ShellExecute(...), if it fails with file association error, we open file by "open as" Shell32.dll dialog

QString file_path = "C:\VeryGoodPath.txt";

int iResult = (int)ShellExecuteA(0, 0, file_path.toStdString().c_str(), 0, 0 , SW_SHOW );

if(iResult>32)

{

// Succesful run

}

else

{

if(SE_ERR_ASSOCINCOMPLETE==iResult)

{

QString ShellCmd = "C:\\Windows\\system32\\shell32.dll,OpenAs_RunDLL \""+file_path +"\"";

ShellExecuteA(0,"open", "C:\\Windows\\system32\\rundll32.exe",ShellCmd.toStdString().c_str(),NULL, SW_NORMAL);

}

else

{

// Errors

}

}

EDIT2: Problem was, that i dont use in

 QDesktopServices::openUrl(...)

this function

 QUrl::fromLocalFile("<path_to_your_file>")

网友答案:

One easy way is to use QDesktopServices::openUrl:

QDesktopServices::openUrl(QUrl::fromLocalFile("<path_to_your_file>"));

This way you can let the operating system handle it. If a program is associated with that file (or URL in general. You can use this function to open an url in the default browser, too) the operating system will launch it or show the default "Open with" dialog.

分享给朋友:
您可能感兴趣的文章:
随机阅读: