Seite 1 von 1

Scanprozess wird nicht ausgeführt

Verfasst: 22. Dezember 2009 08:51
von ralli
Ich habe ein kleines Programm geschrieben, was die Klasse QProcess benutzt und scanimage zum einscannen eine Argumentenliste übergibt:

Code: Alles auswählen

QString programm = "scanimage";

QString device = "-d hpaio:/usb/Photosmart_C4100_series?serial=MY6A9G11T204J7";
QString bildformat = "--format=tiff";
QString scanart = "--mode lineart";
QString aufloesung = "--resolution 300";
QString DINA4 = "-x 210 -y 295";
QString ausgabedatei = ">/home/ralph/ocrarbeit/eingabe.tif";

QStringList arguments;

arguments << device << bildformat << scanart << aufloesung << DINA4 << ausgabedatei;

QProcess *Scan_Prozess = new QProcess(this);

Scan_Prozess->start(programm, arguments);
Leider tut sich überhaupt nichts.

In der Konsole sieht das so aus und funktioniert auch:

scanimage -d hpaio:/usb/Photosmart_C4100_series?serial=MY6A9G11T204J7 --format=tiff --mode lineart --resolution 300 -x 210 -y 295 > /home/ralph/ocrarbeit/eingabe.tif

Ich habe mir die Dokumention angeschaut und mich mit der Klasse QProcess beschäftigt, sowie einige Threads hier im Forum durchgelesen, aber ich habe einen Denkfehler und komme hier leider nicht weiter.

Verfasst: 22. Dezember 2009 09:29
von RavenIV
Könnte es villeicht daran liegen, dass Du zwischen die Argumente noch ein Leerzeichen eintragen musst?
Lass Dir mal den Argumentstring anzeigen.

Verfasst: 22. Dezember 2009 10:13
von ralli
Das war es leider nicht. Ich habe jetzt system("..") benutzt, funktioniert, aber es gibt eine Warnung beim Compilieren:

Code: Alles auswählen

src/dialogimpl.cpp:47: warning: ignoring return value of ‘int system(const char*)’, declared with attribute warn_unused_result 
Ich glaube, ich muss QProces::startDetached nehmen, komme aber noch nicht ganz klar damit.

Verfasst: 22. Dezember 2009 15:08
von bst
Auch Hallo,
QString ausgabedatei = ">/home/ralph/ocrarbeit/eingabe.tif";
dazu brauchst Du i.A. eine Shell, oder handelt Dein scanimage E/A-Umleitung selber?

cu, Bernd

Verfasst: 22. Dezember 2009 15:47
von ralli
Ich möchte den Umweg über xsane vermeiden, weil die übergebenen Argumente ja nie geändert werden. Anschliessend soll im zweiten Durchgang die Tiff Datei mit der Ocr Textengine tesseract bearbeitet und der erkannte Text zur Weiterbearbeitung in einem Textwidget angezeigt werden. Scanimage ist ein Konsolenprogramm und benötigt zur Ausführung eine Shell. Natürlich geht es mit der QProcess Klasse, aber mir fehlt die Erfahrung. Ich habe die Qt Doku bereits gequält, aber es funktioniert nicht, weil mir das Hintergrundwissen fehlt. Natürlich kenne ich den Unterschied zwischen synchronem und asynchronen Prozessen, aber es liegt wohl an der gepipten Ausgabedatei. Leider habe ich kein Beipiel für einen solchen Anwendungsfall gefunden, das ich durcharbeiten konnte, um mein Wissen zu festigen.

Verfasst: 22. Dezember 2009 15:51
von bst
Ich hatte das so gemeint:

Code: Alles auswählen

QString programm = "sh"; 
oder

Code: Alles auswählen

QString programm = "bash"; 
o.ä.

dann nimm zusätzlich "-c" und "scanimage" am Anfang der Arguments (!) hinzu.

Verfasst: 22. Dezember 2009 16:27
von ralli
Aha, ich verstehe und werde es a ausprobieren, danke für Deine Hilfe.