eeghem
2nd June 2010, 10:22
Hi,
I'm using Qt to run inkscape.exe in shell mode. The idea is to process multiple files through inkscape. In shell mode, inkscape accepts commands from stdin. However I'm experiencing problems when I try to write more than one command to inkscape. Here's my code.
int main(int argc, char* argv[]) {
// create application
QCoreApplication app(argc, argv);
QTextStream out(stdout, QIODevice::Unbuffered | QIODevice::WriteOnly);
QProcess inkex;
QStringList arguments;
QString os_program = QDir::toNativeSeparators ("E:/_Inkscape/inkscape.exe");
arguments << "--shell" << "--without-gui";
// start the program
inkex.setProcessChannelMode(QProcess::ForwardedCha nnels);
inkex.start (os_program, arguments, QIODevice::ReadWrite | QIODevice::Unbuffered);
inkex.waitForStarted();
// query the version
inkex.write("--version\n");
// export a file to png
QString svgfile=QDir::toNativeSeparators("E:/_Development/Cpp/RxBuilder/test/test_twee.svg");
QString pngfile=QDir::toNativeSeparators("E:/_Development/Cpp/RxBuilder/test/test_twee.png");
QString cmd="--file=\"%1\" --export-png=\"%2\" --export-area=0:0:1042:768\n";
cmd=cmd.arg(svgfile).arg(pngfile);
out << "---" << endl;
out << cmd << endl;
out << "---" << endl;
inkex.write(cmd.toAscii());
// quit the program
inkex.write("quit\n");
inkex.waitForBytesWritten();
inkex.waitForFinished();
// exit
app.quit();
return 0;
}
The expected result is that the version is displayed and an png-image is created based on the svg-image. However that line never is executed. When the application exits only the version is displayed.
The commandline is not the problem. If I strip the call to:
inkex.write("--version\n");
Inkscape suddenly responds by generating the image. Somehow the first command is actually blocking the execution of the second command. Any idea's on whats wrong here?
Thx.
Ruud
I'm using Qt to run inkscape.exe in shell mode. The idea is to process multiple files through inkscape. In shell mode, inkscape accepts commands from stdin. However I'm experiencing problems when I try to write more than one command to inkscape. Here's my code.
int main(int argc, char* argv[]) {
// create application
QCoreApplication app(argc, argv);
QTextStream out(stdout, QIODevice::Unbuffered | QIODevice::WriteOnly);
QProcess inkex;
QStringList arguments;
QString os_program = QDir::toNativeSeparators ("E:/_Inkscape/inkscape.exe");
arguments << "--shell" << "--without-gui";
// start the program
inkex.setProcessChannelMode(QProcess::ForwardedCha nnels);
inkex.start (os_program, arguments, QIODevice::ReadWrite | QIODevice::Unbuffered);
inkex.waitForStarted();
// query the version
inkex.write("--version\n");
// export a file to png
QString svgfile=QDir::toNativeSeparators("E:/_Development/Cpp/RxBuilder/test/test_twee.svg");
QString pngfile=QDir::toNativeSeparators("E:/_Development/Cpp/RxBuilder/test/test_twee.png");
QString cmd="--file=\"%1\" --export-png=\"%2\" --export-area=0:0:1042:768\n";
cmd=cmd.arg(svgfile).arg(pngfile);
out << "---" << endl;
out << cmd << endl;
out << "---" << endl;
inkex.write(cmd.toAscii());
// quit the program
inkex.write("quit\n");
inkex.waitForBytesWritten();
inkex.waitForFinished();
// exit
app.quit();
return 0;
}
The expected result is that the version is displayed and an png-image is created based on the svg-image. However that line never is executed. When the application exits only the version is displayed.
The commandline is not the problem. If I strip the call to:
inkex.write("--version\n");
Inkscape suddenly responds by generating the image. Somehow the first command is actually blocking the execution of the second command. Any idea's on whats wrong here?
Thx.
Ruud