Russian Qt Forum

Qt => Общие вопросы => Тема начата: Vl@domir от Май 15, 2008, 12:51



Название: Запуск файла через QDesktopServices::openUrl()
Отправлено: Vl@domir от Май 15, 2008, 12:51
Еще раз добрый день  :)

Как правильно указать полный путь к файлу для запуска через QDesktopServices::openUrl()?
например, необходимо запустить файл C:\Folder 1\Folder 2\file.pdf.
Если файл в папке с прогой, то проблем нет  :) Заранее спасибо.

Использую Qt 4.4 + WinXP.


Название: Re: Запуск файла через QDesktopServices::openUrl()
Отправлено: Vl@domir от Май 15, 2008, 14:26
Нашел решение:
QDesktopServices::openUrl(QUrl(QUrl::fromLocalFile(PATH)))  8)



Название: Re: Запуск файла через QDesktopServices::openUrl()
Отправлено: Prm от Сентябрь 23, 2009, 08:06
Красивый способ открытия файла!!! ;)  Респект автору!


Название: Re: Запуск файла через QDesktopServices::openUrl()
Отправлено: Prm от Сентябрь 23, 2009, 15:18
Пока разбирался - обнаружил интересный момент. Если открываемый файл лежит не в папке с EXE-шником приложения и приложение установлено в c:\Program Files\Моя программа\bin - файл отрыть не удалось.
QString help_file = QApplication::applicationDirPath() + "/../doc/help.pdf"; - не открывался.

Решение  крылось в cleanPath. Привожу пример рабочей функции:

bool openFile(const QString &filename)
{
   QString file_name = QDir::cleanPath(filename);

   if(!QFile::exists(file_name))
   {
      QMessageBox::warning(
         QApplication::activeWindow(),
         QApplication::applicationName(),
         "Невозможно открыть файл `" + file_name + "`. Файл не существует!"
         );
      return false;
   }

   if(!QDesktopServices::openUrl(QUrl(QUrl::fromLocalFile(file_name))))
   {
      QMessageBox::information(
         QApplication::activeWindow(),
         QApplication::applicationName(),
         "Невозможно открыть файл `" + file_name + "`. Не найдена программа для его открытия!"
         );

      return false;
   }

   return true;
}


Название: Re: Запуск файла через QDesktopServices::openUrl()
Отправлено: shadone от Сентябрь 28, 2009, 11:23
это баг, в Qt 4.6 все должно работать нормально без дополнительных вызовов cleanPath(). (в 4.5 тоже уже должно работать, но я не проверил эту версию)

(кстати дополнительное преобразование в QUrl не обязательно - QUrl::fromLocalFile() (http://doc.qt.nokia.com/4.5/qurl.html) возвращает QUrl:
Код
C++ (Qt)
QDesktopServices::openUrl(QUrl::fromLocalFile(QApplication::applicationDirPath()+"/../foo.txt"));