Открыть локальный файл HTML из кода в Qt на Mac OSx

Здравствуйте, у меня возникла небольшая проблема с Qt на Mac OSX.

Итак, в моей программе я пытаюсь открыть локальный файл .html, расположенный по тому же пути, что и приложение.

Учитывая, что Qt является кроссплатформенным, моя попытка сработала как для Windows, так и для Ubuntu, и я предположил, что у OSX не должно быть проблем, поскольку он основан на Unix.

это моя попытка

void MainWindow::openBrowser(bool)
{
    QString link = QDir::currentPath()+"/index.html"; // rename the file

    if(! QDesktopServices::openUrl(QUrl(link.trimmed())))
    {
        displayMessage("Access Error", "Unable to open a file");
    }
}

OSX не может найти тот же файл index.html, и я не знаю, почему. Есть ли лучший способ объединить пути?


person Noopty    schedule 03.04.2018    source источник
comment
когда вы говорите тот же путь, что и у приложения, вы имеете в виду рядом с исполняемым файлом или исходным кодом?   -  person eyllanesc    schedule 03.04.2018
comment
@eyllanesc Да, извините, это тот же путь, что и исполняемый файл   -  person Noopty    schedule 03.04.2018
comment
Распечатайте ссылку и расскажите, что вы получите   -  person eyllanesc    schedule 03.04.2018
comment
поэтому ссылка на самом деле печатает правильный каталог, в моем случае это он "/Users/user1/Test/project/examples/exmp1/index.html" Мой исполняемый файл также находится в этой папке, поэтому я запутался.   -  person Noopty    schedule 03.04.2018


Ответы (1)


В MacOS QUrl работает с использованием имени FQ (file://absolute_file.name), и это должен быть переносимый синтаксис на всех платформах. это можно вызвать следующим образом:

if(! QDesktopServices::openUrl(QUrl("file:" + link.trimmed()))) // windows does not like :// 
    {
        qDebug() << "Access Error", "Unable to open a file";
    }

Хотя это и не требуется для локальных html-файлов, Qt использует эту запись в Info.plist для внешних URL-адресов:

<key>NSAppTransportSecurity</key>
<!-- NOTE! For more information, see: https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33-->
<dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
</dict>
person Mohammad Kanan    schedule 03.04.2018
comment
спасибо Магомет за разъяснения! Это сработало, и это также сработало на моих машинах с Linux. - person Noopty; 04.04.2018