现在我正在为一套用于生物信息学的控制台应用程序开发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 []
任何想法为什么会发生这种情况或如何解决?
答案 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 *