3

libxslt ライブラリを使用する Qt GUI アプリケーションを作成しています。libxslt は常にエラーを stderr に出力しますが、場合によっては、それらのメッセージが表示されるのをユーザーが確認できると便利です。stderr 出力をキャプチャして QString に入れる方法はありますか?

4

1 に答える 1

2

次の 2 つのクイック オプションがあります。

1)使用法を外部プロセスでラップし、 QProcessを使用します。

これにより、外部ラッパーが導入されます。これにより、エラーを「時々」オフハンドで処理することはできなくなります。そのためには、何らかの外部処理が必要になります。

QProcess process;
process.start("wrapper");
process.waitForFinished();
qDebug() << process.readAllStandardError();

2) 有名なLinux Programming Interfaceの本の例に従って: stderr (2) ファイル記述子をリダイレクトします。

これはもう少し複雑ですが、外部プロセス ラッパーを回避するのに適しています。また、posix にのみ準拠しているため、それがないと動作しない場合があります。msvc を使用する予定がある場合、これは問題になる可能性があります。Windows バックエンドを個別に作成するか、mingw を使用する必要があります。

int pfd[2];
pipe(pfd);
// Do other things here.
close(STDERR_FILENO);
if (pfd[1] != STDERR_FILENO) {
    dup2(pfd[1], STDERR_FILENO);
    close(pfd[1]);
}
read(...);
于 2014-05-20T21:23:01.773 に答える