0

現在、バイオインフォマティクスに使用される一連のコンソール アプリケーションの GUI に取り組んでおり、Qt を使用した最初のプロジェクトとして最初のテストを行っています。GUIを作成するためにQtDesigner 使用しています.QFileDialogがファイル名の末尾を奇妙な文字に変換することを除いて、すべてが完全に機能します.

これが私のコードです:

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[ ]、場合によっては/home/nsg/Downloads/SRR5029[]

なぜこれが起こっているのか、それを修正する方法はありますか?

4

2 に答える 2

1

あなたの問題はQString::toStdString()、一時オブジェクトを返す を呼び出し、その内容であるポインターを取得しようとしていることです。std::stringが破壊されると、指されたメモリは無効になります。中級者は全く必要ありませんstd::string。これはうまくいくはずです:

QString cmdStr =fastqdumpDir + file;
system( qPrintable(cmdStr) );
于 2013-09-03T16:32:35.397 に答える