Реклама

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

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

@Arrow12 января 2017 г. 2:33#

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

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

Функция С++

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

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"));

Реклама

@Arrow13 января 2017 г. 0:29#ответил @EVILEG

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

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

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь

Реклама