Forum: PC-Programmierung QT und stdin/stdout


von Max Mustermann (Gast)


Lesenswert?

<c>
Kann mir hier jemand weiterhelfen?:


Als möglichst einfaches, erstes Programm habe ich für QT Experimente 
folgendes ausprobiert.
Projekttyp ist Konsolenanwendung. QT habe ich neu installiert und bein 
bei Qt Creator 8.0.1 gelandet.

Ich habe meine Probleme im Code kommentiert, aber noch mal in Kürze.

1) Was mache ich denn nur beim readLine() falsch? Weder hält das 
Programm irgendwie an, noch kann ich etwas eingeben.

2) Auch wenn zunächst eher sekundär. Wie kann ich denn wchars und 
Umlaute benutzen?

3) ist es üblich, dass gar keine schwarze, 'richtige' Konsole aufgeht, 
sondern der Output nur im QTCreator angezeigt wird?
1
#include <QtCore/QCoreApplication>
2
#include <QTextStream>
3
4
int main(int argc, char *argv[])
5
{
6
    QCoreApplication a(argc, argv);
7
8
    QTextStream qin(stdin);
9
    QTextStream qout(stdout);
10
11
    qout << "echo eingeben:" << Qt::flush;
12
    QString echo = qin.readLine();
13
14
    /*Frage 1:
15
    warum macht readLine() denn nichts? Programm läuft da einfach drüber
16
    */
17
    /*Frage 2:
18
    wchar ? Beides führt nicht zum Ergebnis.
19
    qout << "echö eingeben:" << Qt::flush;
20
    qout << L"echö eingeben:" << Qt::flush;
21
    */
22
23
    qout << "Hallo und " << echo << Qt::endl;
24
25
    return a.exec();
26
}

von Martin B. (ratazong)


Lesenswert?

Hallo,

wenn Du im Creator unter projekteinstellungen Ausführen das Häkchen "im 
Terminal ausführen" setzt, geht es. Dann macht der Creator ein terminal 
window auf.

von Rolf M. (rmagnus)


Lesenswert?

Max Mustermann schrieb:
> 1) Was mache ich denn nur beim readLine() falsch? Weder hält das
> Programm irgendwie an, noch kann ich etwas eingeben.

Ich hab das Programm ausprobiert. Bei mir funktioniert es.

> 2) Auch wenn zunächst eher sekundär. Wie kann ich denn wchars und
> Umlaute benutzen?

QString nutzt Unicode, kann also alle entsprechenden Zeichen aufnehmen.

> wchar ? Beides führt nicht zum Ergebnis.
>     qout << "echö eingeben:" << Qt::flush;
>     qout << L"echö eingeben:" << Qt::flush;

Die Frage wäre, ob du in deinem Editor das richtige Encoding verwendest.

> 3) ist es üblich, dass gar keine schwarze, 'richtige' Konsole aufgeht,
> sondern der Output nur im QTCreator angezeigt wird?

Mit welchem Betriebssystem bist du denn überhaupt unterwegs?

von Max Mustermann (Gast)


Lesenswert?

Grüß euch!

>Mit welchem Betriebssystem bist du denn überhaupt unterwegs?

win10. Einfältigerweise vergessen zu erwähnen. sry.

>Die Frage wäre, ob du in deinem Editor das richtige Encoding verwendest.

Also QTcreator. Das ist doch eine IDE, darin habe ich auch editiert.

>Ich hab das Programm ausprobiert. Bei mir funktioniert es.

Oh Mann, du machst mich fertig ;-) Ich werde nachher das ganze noch 
einmal beginnen und auf dies Konsolen Häkchen achten.
Ich weiß jetzt gerade gar nicht mehr, ob ich eine Version auswählen 
konnte beim online Installer. Machts eventuell Sinn etwas älteres zu 
installieren?

von Martin B. (ratazong)


Lesenswert?

Max Mustermann schrieb:
> Oh Mann, du machst mich fertig ;-) Ich werde nachher das ganze noch
> einmal beginnen und auf dies Konsolen Häkchen achten.

Du brauchst nicht von vorne anzufangen. Auf der rechten Seite des 
qtcreator ist ein menupunkt "Projekte" Da drauf und die 
Projekteinstellungen angucken. Wenn Häkchen gefunden, dann einfach aktiv 
machen.

> Machts eventuell Sinn etwas älteres zu installieren?

Kommt drauf an, was Du vorhast. Lizenzrechtlich sind ältere Versionen 
besser. Wenns denn auf alten Betriebssystemen laufen soll, zwingend.

von Rolf M. (rmagnus)


Lesenswert?

Max Mustermann schrieb:
> Grüß euch!
>
>>Mit welchem Betriebssystem bist du denn überhaupt unterwegs?
>
> win10. Einfältigerweise vergessen zu erwähnen. sry.
>
>>Die Frage wäre, ob du in deinem Editor das richtige Encoding verwendest.
>
> Also QTcreator. Das ist doch eine IDE, darin habe ich auch editiert.

Ok, wenn es Windows ist, kann es auch en der Konsole liegen. Deren 
Encoding muss auch passen, und mein letzter Stand ist, dass die leider 
immer noch nicht per Default utf-8 verwendet, sondern irgend so ein 
Encoding, das noch aus DOS-Zeiten stammt. Das müsste man irgendwie 
umstellen können, aber da kenne ich mich zu wenig damit aus.

>>Ich hab das Programm ausprobiert. Bei mir funktioniert es.
>
> Oh Mann, du machst mich fertig ;-) Ich werde nachher das ganze noch
> einmal beginnen und auf dies Konsolen Häkchen achten.
> Ich weiß jetzt gerade gar nicht mehr, ob ich eine Version auswählen
> konnte beim online Installer. Machts eventuell Sinn etwas älteres zu
> installieren?

Sollte eigentlich keine Rolle spielen.

von Udo K. (udok)


Lesenswert?

Rolf M. schrieb:
>> Also QTcreator. Das ist doch eine IDE, darin habe ich auch editiert.
>
> Ok, wenn es Windows ist, kann es auch en der Konsole liegen. Deren
> Encoding muss auch passen, und mein letzter Stand ist, dass die leider
> immer noch nicht per Default utf-8 verwendet, sondern irgend so ein
> Encoding, das noch aus DOS-Zeiten stammt. Das müsste man irgendwie
> umstellen können, aber da kenne ich mich zu wenig damit aus.

An dem liegt es nicht. UTF-8 ist wie auch DOS ANSI kompatibel.

von Udo K. (udok)


Lesenswert?

Rolf M. schrieb:
>> win10. Einfältigerweise vergessen zu erwähnen. sry.
>>

Typisch Max Mustermann, die vergessen ja auch ihren Namen.

von Max Mustermann (Gast)


Lesenswert?

>Typisch Max Mustermann, die vergessen ja auch ihren Namen.

;-) kann man doch durch die Allgemeingültugkeit eigentlich gar nicht.


Ich habe gestern nur schnell geschaut, jedoch einen entsprechenden 
Konsolenhaken noch nicht gefunden. Erstaunlicherweise kann ich die 
erzeugte exe-Datei nicht einfach starten. 3 Systemfehler entstehen.

libgcc_s_seh-1.dll wird nicht gefunden.
Qt6Core.dll wurde nicht gefunden
libstdc++-6.dll wurde nicht gefunden

Qt Creator habe ich noch einmal deinstalliert und installiert. Ist das 
ein 'bekanntes' Problem weil ich etwas falsch gemacht habe?
Wenn du eine Lösung hast, bin ich völlig einverstanden, das süffisant 
platt zu walzen, Udo. :-)

von Martin B. (ratazong)


Lesenswert?

Du kannst die nicht manuell starten, weil das Programm die dlls nicht 
findet.

Entweder benutzt Du dann windeployqt.exe. Da muss man sich aber erst 
einlesen. Die befindet sich im qt Programmverzeichnis. Bei mir ist das 
unter
c:\Qt\Qt5.12.10\5.12.10\mingw73_32\bin\windeployqt.exe Ist Versions und 
Compilerabhängig

Oder du kopierst die angemeckerten erforderlichen DLLs manuell in das 
Verzeichnis, wo Dein Programm steht. Die musst Du dann im Qt 
Installationsverzeichnis suchen. Bei mir stehen sie (unter Windows) in
c:\Qt\Qt5.12.10\5.12.10\mingw73_32\bin. Dann kannst Du das Programm auch 
starten.
Wenn Du im Creator startest, setzt der die Pfade richtig, da braucht man 
sich um die DLLs nicht kümmern.

Hast Du mehrere Compiler installiert?

Qt kann mehrere Betriebssysteme und Compiler, das macht die Bedienung 
dann kompliziert. Der Lohn ist plattfomunabhängigkeit. Ich benutze das 
für Android,Linux und Windows und muss auch immer wieder lesen.

von Rolf M. (rmagnus)


Lesenswert?

Udo K. schrieb:
> An dem liegt es nicht. UTF-8 ist wie auch DOS ANSI kompatibel.

Meinst du ASCII? Das enthält keine Umlaute, und die Konsole stellt in 
Voreinstellung kein UTF-8 dar. Daher werden Umlaute nicht richtig 
angezeigt.

Udo K. schrieb:
> Rolf M. schrieb:
>>> win10. Einfältigerweise vergessen zu erwähnen. sry.
>>>
>
> Typisch Max Mustermann, die vergessen ja auch ihren Namen.

Immerhin hat er das mit dem Zitieren im Griff. 😉

Martin B. schrieb:
> Oder du kopierst die angemeckerten erforderlichen DLLs manuell in das
> Verzeichnis, wo Dein Programm steht.

Das reicht nicht, denn Qt lädt zur Laufzeit Plugins nach, die ebenfalls 
da sein müssen. Das wird aber erst nach dem Start angemeckert. Bei so 
einem einfachen Programm wird wahrscheinlich nur das Plattform-Plugin 
nötig sein, aber bei graphischen Programmen werden das schnell Dutzende.

> Qt kann mehrere Betriebssysteme und Compiler, das macht die Bedienung
> dann kompliziert. Der Lohn ist plattfomunabhängigkeit. Ich benutze das
> für Android,Linux und Windows und muss auch immer wieder lesen.

Ich auch. Dabei habe ich mir die entsprechenden 
Cross-Compiler-Umgebungen zusammengebastelt, um Qt-Programme direkt von 
Linux aus für alle drei Systeme compilieren zu können. Für den 
Windows-Crossbuild war mxe eine große Hilfe.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.