QFileDialog «уничтожает» название файлов

Прямо сейчас я работаю над графическим интерфейсом для набора консольных приложений, используемых для биоинформатики, и я делаю свои первые тесты в качестве моего первого проекта с использованием Qt. Я использую QtDesigner для создания графического интерфейса, и все работает отлично, за исключением того, что QFileDialog преобразует конец имени файла в странный символ, хотя я не совсем уверен, является ли это QFileDialog, или преобразование из QString в const char.

Вот мой код:

QString file=QFileDialog::getOpenFileName(this, tr("Open File"),"/home/",tr("Any file (*.*)"));
QString fastqdumpDir = "/home/nsg/Downloads/sratoolkit.2.1.16-centos_linux32/bin/"fastqdumpDir=fastqdumpDir+"./fastq-dump ";
QString cmdStr =fastqdumpDir + file;
const char* command = cmdStr.toStdString().c_str();
system(command);

Программа fastq-dump завершается, потому что она говорит, что имя файла неверно, и после отладки я вижу, что имя файла идет от /home/nsg/Downloads/SRR502947.sra в /home/nsg/Downloads/SRR502947.sra [] а иногда даже / Главная / NSG / Загрузки / SRR5029 []

Есть идеи, почему это происходит или как это исправить?

0

Решение

Ваша проблема в том, что вы звоните QString::toStdString(), который возвращает временный объект и пытается получить указатель на его содержимое. Указанная память становится недействительной, поскольку std::string уничтожен Вам не нужно промежуточного std::string совсем. Это должно работать:

QString cmdStr =fastqdumpDir + file;
system( qPrintable(cmdStr) );
1

Другие решения

Вместо того, чтобы использовать системную команду для запуска внешней программы, вы можете использовать Qtcess Qt: —

QString cmdStr = fastqdumpDir + file;
QProcess::execute(cmdStr);

или же

QProcess::startDetached(cmdStr)

если вы не хотите ждать окончания процесса. Так как функции принимают QString, нет необходимости в преобразовании в const char *

0