首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QFileDialog“销毁”文件的名称

QFileDialog“销毁”文件的名称
EN

Stack Overflow用户
提问于 2013-09-03 16:19:25
回答 2查看 121关注 0票数 0

现在,我正在为一组用于生物信息学的控制台应用程序开发GUI,我正在进行第一次测试,这是我使用Qt的第一个项目。我使用QtDesigner来使GUI和一切都完美地工作,除了QFileDialog将文件名的末尾转换成一个奇怪的字符之外,尽管我不太确定它是QFileDialog,还是从QStringconst char的转换。

这是我的代码:

代码语言:javascript
复制
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[]

有什么想法吗?为什么会发生这种情况,或者如何解决?

EN

回答 2

Stack Overflow用户

发布于 2013-09-03 16:32:35

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

代码语言:javascript
复制
QString cmdStr =fastqdumpDir + file;
system( qPrintable(cmdStr) );
票数 1
EN

Stack Overflow用户

发布于 2013-09-03 16:29:39

与使用system命令运行外部程序不同,您可以使用Qt的QProcess:-

代码语言:javascript
复制
QString cmdStr = fastqdumpDir + file;
QProcess::execute(cmdStr);

代码语言:javascript
复制
QProcess::startDetached(cmdStr)

如果您不想等待进程完成。由于函数采用QString,所以不需要转换为const *

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18597018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档