Seite 1 von 1

[gelöst] Fehler beim Abfragen von Radiobuttons

Verfasst: 6. April 2007 22:33
von qtNiko
hallo,

fange gerade mit QT3/QtDesigner3 und C++ an, habe diverse Beispiele angesehen, aber noch viele Fragen. Ich arbeite mit Suse 10.1 und dem darin enthaltenen Qt3, bzw. QtDesigner3.

Mein Problemchen:
In meiner Anwendung gibt es eine QButtonGroup mit 3 RadioButtons, exclusive.
Bei Klick auf einen der Buttons soll einfach ein Labeltext verändert werden.

1. Versuch, funktioniert
QButtonGroup, Signal clicked(int), mit Slot setFileInputLabel( int) verbunden.
Code:
void mainForm::setFileInputLabel( int pressedButton )
{
if (pressedButton==2)
Label1->setText("Terrain-Datei");
...
}


Nun versuchte ich es mit der Property "selectedId" von QButtonGroup.
Meine QButtonGroup heißt GroupSimType.

2. Versuch
code:
void mainForm::setFileInputLabel( int pressedButton )
{
if (GroupSimType->selectedId==2)
Label1->setText("Terrain-Datei");
...
}

Nach make erhalte ich nun die Fehlermeldung:
Fehler: invalid use of member (did you forget the »&« ?)

Wenn ich dagegen schreibe
if (GroupSimType->selectedId()==2)
dann rufe die gleichnamige Funktion auf und damit klappt es wieder.

Frage 1: Kann denn nicht direkt auf die Property selectedId zugreifen?

Frage 2: Wie kann ich ein mit Qt3 erzeugtes Programm mit Qt4 und vor allem QtDesigner4 weiterbearbeiten?

Frage 3: Wie kann ich Qt3/QtDesigner3 und Qt4/QtDesigner4 nebeneinander auf meinem Suse Linux 10.1 laufen lassen?
Ein erster Versuch endete mit einer Fehlermeldung von qmake, die sinngemäß lautete: "... program generated with too old version of qtdesigner..."

Re: Fehler beim Abfragen von Radiobuttons

Verfasst: 7. April 2007 08:33
von macman
Vergiss Qt3 und arbeite nur mit Qt4.
qtNiko hat geschrieben:Frage 2: Wie kann ich ein mit Qt3 erzeugtes Programm mit Qt4 und vor allem QtDesigner4 weiterbearbeiten?
Gar nicht. Du musst das komplette Programm konvertieren.
http://doc.trolltech.com/4.2/porting4.html

Verfasst: 7. April 2007 18:36
von dontinelli
Zu Frage 1:
Auf Eigenschaften kannst du nur über eine Funktion zugreiffen.
(http://doc.trolltech.com/3.2/qbuttongro ... selectedId)
Ich denke aber, dass du die Klammer noch verkraften kannst... :lol:

Ich würde auch so früh wie möglich auf Qt 4 umstellen. Ist bei Suse auch schon dabei, ansonsten kannst du es auch selber installieren. Mit der Umstellung solltest du klar kommen, da die Grundstruktur dieselbe geblieben ist, nur einige Funktionen und Klassen haben neue Namen erhalten...

Cheers
Don Tinelli

Verfasst: 9. April 2007 01:06
von qtNiko
Danke schon mal für die beiden Antworten.

Jetzt habe ich erst mal zu tun, um mein Programm auf Qt4 umzuschreiben.

Mittlerweilen habe ich gleich noch eine Frage, die sicher unabhängig von Qt3 oder Qt4 ist:

Ich habe mehrere PushButtons, die jeweils einen Dateiöffnen-Dialog anstoßen, aber jeweils für eine andere Datei.
Um nicht mehrere Slots schreiben zu müssen, habe ich alle PushButtons mit ihren Signals pressed() mit einem einzigen Slot getFileNames() verbunden.
Im Slot frage ich nacheinander jeden PushButton mit isDown() ab, ob er gerade angeklickt ist.

Code:
...
if (Button1->isDown)
frage nach Datei 1;
if (Button2->isDown)
fragen nach Datei 2;
... usw.

Wenn ich nun auf Button2 klicke, dann kommt immer zuerst die Abfrage nach Datei 1 und dann erst die nach Datei 2.
Es sieht so aus, dass der Button1 immer den Zustand "Down" hat.
Ich nahm an, dass der Zustand "Down" nur so lange gilt, wie der Klick dauert.

Was kann man da machen?

Verfasst: 10. April 2007 08:10
von macman
qtNiko hat geschrieben:Was kann man da machen?
Zwei Möglichkeiten:
http://doc.trolltech.com/4.2/qobject.html#sender
http://doc.trolltech.com/4.2/qsignalmapper.html
Die zweite gefällt mir besser :-)

geklärt: Fehler beim Abfragen von Radiobuttons

Verfasst: 10. April 2007 22:27
von qtNiko
hallo,

vielen Dank für die Info.
Ich werde das gleich ausprobieren. Die zweite Lösung gefällt mir auch besser.
Dennoch muss ich schon feststellen, dass das Verhalten von QPushButton doch etwas eigenartig ist. Ohne die kompetenten Tipps in diesem Forum kommt man auf solche Lösungen nicht so ohne weiteres.
Nun ja, die Lernkurve steigt an javascript:emoticon(':D')
Very Happy