Реклама
  • 12 января 2017 г. 2:33

Открытие файла

Открыть файл в сторонней программе, QProcess, QDesktopServices

Подскажите как можно в Qt 5.7 открыть файл в назначенной в системе программе по умолчанию.

Например файл *.txt в текстовом редакторе, *.jpg в графическом редакторе и т.д.

Функция С++

system()
открывает только программы, а при попытке через
QProcess *proc = new QProcess;
 proc->start(leftDirModel->filePath(index));
ничего не происходит
Реклама
  • #
  • 12 января 2017 г. 11:13

QProcess не открывает нужную программу в зависимости от типа файла. Необходимо сначала выяснить, какого типа является файл, а потом уже открывать нужную программу через QProcess, передав ей в качестве аргумента путь к файлу.

Самый простой способ определения типа файла - это проверить его расширение, то есть .txt или .svg на конце к примеру. А потом уже открывать нужную программу из возможных установленных в системе.

QString program_1 = "gedit";                     // Текстовый редактор Gedit в Linux
QString program_2 = "inkscape";                  // Векторный редактор Inkscape
QString fileName = "/home/some_user/check.txt";  // Абсолютный путь к файлу в Linux
QProcess *myProcess = new QProcess(this);

if (fileName.endsWith(".txt"))
{
    myProcess->start(program_1, QStringList() << fileName);
}
else if (fileName.endsWith(".svg"))
{
    myProcess->start(program_2, QStringList() << fileName);
}

Заметьте, что необходимо учитывать синтаксис командной строки для каждой программы, которую Вы намерены открывать через QProcess.

QProcess не имеет представления о программах установленных на ПК, то есть о программах по умолчанию для файлов.

А вот о программах по умолчанию знает класс QDesktopServices, и он должен открывать нужные софтины просто по URL файла:

QDesktopServices::openUrl(QUrl("/home/some_user/check.txt"));
  • EVILEG
  • #
  • Ответ был помечен как решение
  • 13 января 2017 г. 0:29

Спасибо. Так работает:

QDesktopServices::openUrl(QUrl(QUrl::fromLocalFile(lModel->filePath(index))));       // QTableView *lModel;

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
Реклама
Последние комментарии
  • EVILEG
  • 24 апреля 2017 г. 20:44
Подключение вашего Qt приложения к сервисам Google, используя OAuth 2.0

У меня пока мыслей на этот счёт нет ((

Подключение вашего Qt приложения к сервисам Google, используя OAuth 2.0

Пробовал играться с шарком, либо я криво смотрел, либо почему-то POST запросы на oauth.yandex.ru не летят, хотя должны постом лететь, я и исходники QOAuth2AuthorizationCodeFlow ковырял на пред

  • EVILEG
  • 24 апреля 2017 г. 13:39
Подключение вашего Qt приложения к сервисам Google, используя OAuth 2.0

Возможно, стоит Wireshark`ом запросы посмотреть. В чём отличие идёт аякс запроса от запроса из библиотеки. Возможно, что не хватает какой-нибудь заголовочной информации.

Сейчас обсуждают на форуме
  • EVILEG
  • 28 апреля 2017 г. 20:02
Qt Installer Framework. Вызов программы при деинсталляции.

А. Вон оно как. Ну хорошо, что оказалось так просто.

  • EVILEG
  • 28 апреля 2017 г. 17:01
QTWebEngineView

На самом деле всё гораздо проще. у QWebEngineView есть сигнал urlChanged() . Вот его и нужно использовать, чтобы получить новый url страницы. Заголовочный файл #...

  • EVILEG
  • 28 апреля 2017 г. 9:30
Другой ToolBar

Если ToolBar все должны находиться внутри окна mainwindow, то создайте необходимое количество ToolBar`ов и часть из них сделайте скрытыми. А когда открываете диалог, то показывайте скрытые Too...

  • EVILEG
  • 28 апреля 2017 г. 9:13
Ошибка

Заголовочный файл класса StyleHelper не подключили в файл реализации mainwindow.cpp