现在,我正在为一组用于生物信息学的控制台应用程序开发GUI,我正在进行第一次测试,这是我使用Qt的第一个项目。我使用QtDesigner来使GUI和一切都完美地工作,除了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转储程序的结束是因为它说文件名不正确,在调试之后,我看到文件名从/home/nsg/Downloads/SRR502947.sra到/home/nsg/Downloads/SRR502947.sra[],有时甚至是/home/nsg/Downloads/SRR5029[]。
有什么想法吗?为什么会发生这种情况,或者如何解决?
发布于 2013-09-03 16:32:35
您的问题是,您正在调用QString::toStdString() (它返回一个临时对象),并试图获取它的内容的指针。当std::string被销毁时,指向的内存变得无效。您根本不需要中间的std::string。这应该是可行的:
QString cmdStr =fastqdumpDir + file;
system( qPrintable(cmdStr) );发布于 2013-09-03 16:29:39
与使用system命令运行外部程序不同,您可以使用Qt的QProcess:-
QString cmdStr = fastqdumpDir + file;
QProcess::execute(cmdStr);或
QProcess::startDetached(cmdStr)如果您不想等待进程完成。由于函数采用QString,所以不需要转换为const *
https://stackoverflow.com/questions/18597018
复制相似问题