QFileDialog“销毁”文件的名称

时间:2013-09-03 16:19:25

标签: c++ qt bioinformatics fastq

现在我正在为一套用于生物信息学的控制台应用程序开发GUI,我正在进行第一次测试,这是我的第一个使用Qt的项目。我正在使用QtDesigner来制作GUI,除了QFileDialog将文件名的末尾转换为奇怪的字符外,一切都运行正常,尽管我不确定它是QFileDialog,还是来自 QString的转换 into 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 进入< strong> /home/nsg/Downloads/SRR502947.sra [] ,有时甚至 / home / nsg / Downloads / SRR5029 []

任何想法为什么会发生这种情况或如何解决?

2 个答案:

答案 0 :(得分:1)

您的问题是您正在调用QString::toStdString(),它返回一个临时对象,并尝试获取指针的内容。指向的内存在std::string被销毁时变为无效。您根本不需要中间std::string。这应该有效:

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

答案 1 :(得分:0)

您可以使用Qt的QProcess,而不是使用系统命令来运行外部程序: -

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

QProcess::startDetached(cmdStr)

如果您不想等待该过程完成。由于函数采用QString,因此不需要转换为const char *

相关问题