2015-01-06 2 views
2

Я нашел несколько answers, но они не работают над моей сборкой Qt5.3.1.Qt5 пробелы в пути

У меня есть QProcess, которые мне нужно работать с пути файла в качестве аргумента:

/home/user/.wine/drive_c/users/user/Local Настройки/LocalLow/AB C/тест/test1

Когда я пытаюсь запустить программу через этот объект QProcess, она терпит неудачу, поскольку она не имеет экранированных пробелов. Тогда я попытался это исправить с помощью QDir::toNativeSeparators, но он не работает:

QDir::toNativeSeparators("/home/user/.wine/drive_c/users/user/Local Settings/LocalLow/A B C/test/test1") 

возвращает точно ту же строку, я прохожу в качестве аргумента.

Вот как я начинаю процесс:

QProcess process; 
QStringList arguments; 
arguments.append(binaryDir); 
process.setArguments(arguments); 
process.setProgram("wine"); 
process.start(); 

P.S. Я не могу исправить это вручную, потому что путь идет куда-то извне.

ответ

0

Существует два возможных способа. Вы можете использовать либо убежали кавычки (вставляя строку в кавычки):

QStringList arguments; 
QString str="\"/home/user/.wine/drive_c/users/user/Local Settings/LocalLow/A B C/test/test1\""; 
arguments.append(str); 

Или используют QStringList() перегрузку start, которая делает вылетающему автоматически.

1

Вы можете передать аргументы QProcess как QStringList, это не займет пробелов.

Вот небольшой фрагмент, который можно проверить с помощью вашего любимого файлового менеджера.

static QString arg="/home/user/.wine/drive_c/Program Files/"; 
static QProcess p; 
p.start("/usr/bin/dolphin", QStringList(arg)); 
Смежные вопросы