Qt: Как открыть файл с помощью внешней программы, & quot; открыть с помощью … & quot; диалог

Как я могу открыть файл с помощью связанной внешней программы и в случае сбоя вызвать диалог «Открыть с помощью …»?

Это может быть независимый от платформы код? Или мне нужно использовать

#ifdef
#else
#endif

конструкции для реализации вызова диалога «открыть с …» для каждой платформы?

заранее спасибо

РЕДАКТИРОВАТЬ: Обновление, после нескольких часов исследований, я нашел хорошее решение для Windows.

Мы пытаемся открыть файл с помощью ShellExecute (…), если это не удается из-за ошибки ассоциации файлов, мы открываем файл с помощью диалога «открыть как» Shell32.dll

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: проблема заключалась в том, что я не использую в

 QDesktopServices::openUrl(...)

эта функция

 QUrl::fromLocalFile("<path_to_your_file>")

0

Решение

Одним из простых способов является использование QDesktopServices::openUrl:

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

Таким образом, вы можете позволить операционной системе справиться с этим. Если с этим файлом связана программа (или URL в целом. Эту функцию можно использовать и для открытия URL-адреса в браузере по умолчанию), операционная система запустит его или покажет диалоговое окно «Открыть с помощью» по умолчанию.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]