Forum: PC-Programmierung QT Anfängerfrage


von Dude (Gast)


Lesenswert?

Hallo!
Ich arbeite mich grad in Qt ein und steh vor einem kleinen
Verständnisproblem. Warum funktioniert das so nicht?

QObject::connect(m_lineEdit, SIGNAL(textChanged(text)), m_lineEdit2,
SLOT(insert(text)));

Das ganze soll machen:
Wenn in m_lineEdit ein Buchstabe hinzugefügt wird, soll er in
m_lineEdit2 kopiert werden. Verstehe nicht ganz warum das so nicht
geht. Mache ich da bei den Parametern was falsch?
Hoffe hier arbeitet jemand mit Qt und kann mir weiterhelfen.

Gruß Dude

von Manuel B. (Gast)


Lesenswert?

(entfernt)

von Dude (Gast)


Lesenswert?

Hallo Manuel!
Erstmal danke für deine Hilfe. Wenn ich das ganze mit dem Designer
erstelle und dort auch die Connection erstelle, dann funktioniert es
bei mir auch. Das Problem, dass immer der ganze Text kopiert wird, habe
ich mit dem Slot setText(text) gelöst. Dann wird sofort nach einer
Eingabe auch das zweite lineEdit aktualisiert.
Meine Frage ist jetz, wenn ich das manuell verbinden möchte, so wie ich
das oben gezeigt habe, dann funktioniert das ganze nicht. Muss ich
"text" vorher noch als QString* deklarieren? Oder habe ich da noch
irgendwas vergessen, was man beachten muss?

Gruß Dude!

von Rolf Magnus (Gast)


Lesenswert?

Du versuchst, ein Signal und einen Slot zu verbinden, die als ersten und
einzigen Parameter einen vom Typ "text" haben. Diese gibt es nicht. Es
sollte wohl eher const QString& sein, also:

QObject::connect(m_lineEdit, SIGNAL(textChanged(const QString&)),
                 m_lineEdit2, SLOT(setText(const QString&)));

von Dude (Gast)


Lesenswert?

Hallo!
Ja genau das war es. Dachte immer, dass ich einen Zeiger übergeben
muss, der vom Signal bearbeitet wird und dann vom Slot gelesen wird.
Also habe ich einen Zeiger QString *text deklariert. Das war das
Problem. Also danke für die Hilfe.

Nochmal eine andere Sache:
Wie kann ich mir das relativ einfach beibringen, wie ich Linien und
Punkte in einem Fenster zeichen lassen kann?
Suche auch noch ein vernünftige Tutorial für Netzwerkprogrammierung und
Serielle Schnitstelle mit QT. Das von Trolltech allein finde ich etwas
sparsam und ein wenig zu englisch :-)

MFG Dude.

von Rolf Magnus (Gast)


Lesenswert?

Wenn man selbst in ein Widget zeichnen will, überschreibt man dessen
Funktion paintEvent() und erzeugt darin eine Instanz von QPainter.
1
void MyWidget::paintEvent(QPaintEvent* ev)
2
{
3
    QPainter painter(this);
4
    painter->drawLine(10, 10, 100, 100);
5
}

Die serielle Schnittstelle kann man in Qt nicht direkt ansprechen, aber
es gibt eine Erweiterung namens QExtSerial, die aber wohl schon recht
alt ist und nicht mehr gepflegt wird.
Netzwerkprogrammierung geht auch in Qt, ist aber nicht so flexibel wie
BSD Sockets, dafür halt portabel. Dazu gibt's bei Qt auch einige
Beispielprogramme, genauso wie für's Zeichnen und so ziemlich alles
andere.

von Dude (Gast)


Lesenswert?

Hallo!
Erstmal allerbesten Dank für die Hilfe von euch. Hat mich schon ein
gutes Stück weiter gebracht.

Jetzt aber mein nächstes Problem:
Ich habe jetzt ein Programm in einem Widget geschrieben, dass ich so
gut finde, dass ich das gerne noch mit ein paar Buttons zur Eingabe uns
so aussatten würde. Jetzt habe ich aber erstmal ohne den Designer
gearbeitet und einfach eine Klasse von QWidget abgeleitet, wo ich auch
alle Funktionen drin habe.
Kann ich im nachhinein noch mit dem Designer arbeiten und meine Klasse
da einbinden oder wie kriege ich das hin, ohne meine Klasse großartig
zu verändern?

Gruß Dude

von Dude (Gast)


Lesenswert?

Hallo!
Hm also das nächstemal denke ich auf jedenfall vorher mal drüber nach,
wie das später aussehen soll. So ein bisl Projektmanagement is ab ner
bestimmten Quelltextlänge wohl ganz sinnvoll. Habs jetzt aber schon ein
bisl anders gelöst. Habe einfach alles was ich noch einbauen wollte mit
in mein Widget reingepackt. Sieht wohl ganz passabel aus.
Aber trotzdem danke für den Tip. Werde ich mir das nächstemal zu Herzen
nehmen.

Was mir jetzt noch Probleme macht ist, wenn ich das Fenster
verkleinere, malt er ständig die Buttons neu, und das quer durch das
Fenster. Kann man das noch irgendwie unterbinden?
Und habe ich die Möglichkeit an die Bildschirmauflösung des
Betriebssystems zu kommen um mein Fenster daran anzupassen?

Gruß Dude

von Dude (Gast)


Lesenswert?

Hallo!
Ah das mit den Spacern is n guter Tip. Hatte mich schon gefragt wofür
die sind. Das Tutorium auf kdevelop.org werde ich mir bei Gelegenheit
mal antun.
Hast mir, wie jedesmal, gut weitergeholfen. Danke dafür!

Jetzt hab ich noch eine abschließende Frage:
Wie kriege ich das hin, dass mein Programm auch auf anderen Rechnern
ohne Qt läuft. Kann ich das so compilieren, dass alles in der exe-Datei
steckt oder muss ich die Qt dll separat mitliefern? Hab da irgebdwas von
statischem Compilieren gelesen, aber nicht ganz verstanden, wie ich das
hinbekomme.

Gruß Dude

von faust (Gast)


Lesenswert?

Was ist denn mit den Beiträgen von Manuel B. (Xitara) passiert?

Dort steht bei mir immer nur "(entfernt)"??

Sind die Beiträge zensiert?

faust

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.