Russian Qt Forum
Сентябрь 22, 2024, 20:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запуск файла через QDesktopServices::openUrl()  (Прочитано 10753 раз)
Vl@domir
Гость
« : Май 15, 2008, 12:51 »

Еще раз добрый день  Улыбающийся

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

Использую Qt 4.4 + WinXP.
Записан
Vl@domir
Гость
« Ответ #1 : Май 15, 2008, 14:26 »

Нашел решение:
QDesktopServices::openUrl(QUrl(QUrl::fromLocalFile(PATH)))  Крутой

Записан
Prm
Гость
« Ответ #2 : Сентябрь 23, 2009, 08:06 »

Красивый способ открытия файла!!! Подмигивающий  Респект автору!
Записан
Prm
Гость
« Ответ #3 : Сентябрь 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;
}
Записан
shadone
Гость
« Ответ #4 : Сентябрь 28, 2009, 11:23 »

это баг, в Qt 4.6 все должно работать нормально без дополнительных вызовов cleanPath(). (в 4.5 тоже уже должно работать, но я не проверил эту версию)

(кстати дополнительное преобразование в QUrl не обязательно - QUrl::fromLocalFile() возвращает QUrl:
Код
C++ (Qt)
QDesktopServices::openUrl(QUrl::fromLocalFile(QApplication::applicationDirPath()+"/../foo.txt"));
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.146 секунд. Запросов: 21.