PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QPushbutton -> numerischer Wert



toblinger
18-11-2004, 23:54
Hallo zusammen,

dies ist mein erstes Posting in diesem Forum. Da ich mit der Graphikbibliothek QT bisher so gut wie nichts zu tun hatte, diese allerdings im Rahmen eines Praktikums einsetzen muss (darf), plagt mich momentan folgendes Problem: wie schaffe ich es bzw. welche Umwege gibt es, dass mir das Objekt QPushbuttonxy einen numerischen Wert zurückgibt?

Bei meiner Aufgabe handelt es sich konkret darum, einen Taschenrechner mit graphischer Oberfläche zu erstellen. Hierzu habe ich u.a. eine Klasse tastatur, die verschiedene Objekte vom Typ QPushbutton enthält und eine Klasse rechner, welche die arithmetischen Rechenoperationen durchführen soll, erstellt. Ziel wäre es nun, den von QPushbutton repräsentierten Integerwert der Methode rechner.arithmetik(int) zu übergeben.

Meine bisheriges Vorgehen schaut nun so aus, dass ich innerhalb der Klasse tastatur für jedes Objekt vom Typ QPushbutton einen Slot (z.B. void auswahl_1()) definiert habe.

Der Code schaut in groben Ausschnitten so aus:




class tastatur : public QWidget
{
Q_OBJECT
...
QPushbutton* button_1
...
public slots:
void auswahl_1 ();
...

signals:
valueChanged (int);
...
}
-----------------------------------------------------------------------------------------------
tastatur :: tastatur (...)
{
...
button_1= new QPushButton( this, "button1" );
...
rechner initrechner ();
...
connect( Button1, SIGNAL( clicked() ), this, SLOT( auswahl_1() ) );
// Aufruf des Slots auswahl_1
...
}

void tastatur::auswahl_1()
{
connect(this, SIGNAL(valueChanged(1)),initrechner, SLOT(arithmetik(1)));
//innerhalb des Slots auswahl_1 () möchte ich den int-Wert
// 1 an die Methode arithmetik () der Klasse rechner übergeben
}


Für einen Hinweis, ob dieses Vorgehen überhaupt funktioniert bzw. für einen Vorschlag, wie man das Problem eleganter löst, wäre ich sehr dankbar.

Viele Grüße,

Toblinger

anda_skoa
19-11-2004, 00:07
Für einen Hinweis, ob dieses Vorgehen überhaupt funktioniert bzw. für einen Vorschlag, wie man das Problem eleganter löst, wäre ich sehr dankbar.


Nicht ganz :)

Die beiden connect Macros SIGNAL und SLOT umschliessen eine Deklaration ohne Paramternamen, also Name des Signals oder Slots und die Liste der Parametertypen.
Das was du in diesem Slot auswahl_1 machen musst, ist dein eignes valueChanges Signal auszusenden (emit



void tastatur::auswahl_1()
{
emit valueChanged(1);
}


Es gibt noch eleganter Möglichkeiten, aber besser du arbeitest dich erstmal mit dieser Lösung ein und kommst darauf zurück, wenn man dir ein paar Schlagworte und Suchbegriffen aus der Doku servieren kann ;)

Ciao,
_

toblinger
19-11-2004, 12:32
Hallo,

vielen Dank für Deinen Hinweis. Das bringt mich ein gutes Stück weiter. Für hilfreiche Schlagwörter aus der Doku bin ich auch jederzeit dankbar.

Nun nochmal zu meinem Problem zurück. Sicherlich wäre es eleganter, sich einen (!) Slot auswahl () zu definieren. Innerhalb dieses Slots muss ich dann beispielsweise mittels einer switch-Anweisung feststellen, welcher button gedrückt wurde.
Hätte der folgende Code Chancen, zu funktionieren?


void :: tastatur auswahl ()
{
switch (QPushbutton)
{
case button1: emit valueChanged(1);
case button2: emit value Changed(2);
...
}
}


P.S. Der Grund, warum ich nachfrage, ob dies oder das funktioniert, liegt darin, dass ich es bisher mit meiner Entwicklungsumgebung kdevelop nicht geschafft habe, mit QTDesigner generierte Dateien zu kompilieren und so auf hilfreiche Kompilermeldungen zurückgreifen kann.

Viele Grüße,

Toblinger

anda_skoa
19-11-2004, 13:20
vielen Dank für Deinen Hinweis. Das bringt mich ein gutes Stück weiter. Für hilfreiche Schlagwörter aus der Doku bin ich auch jederzeit dankbar.

QButtonGroup :)
Wenn du die "id" entsprechend dem Zahlenwert wählst, kannst du direkt das clicked(int) Signal der Buttongroup verwenden.



P.S. Der Grund, warum ich nachfrage, ob dies oder das funktioniert, liegt darin, dass ich es bisher mit meiner Entwicklungsumgebung kdevelop nicht geschafft habe, mit QTDesigner generierte Dateien zu kompilieren und so auf hilfreiche Kompilermeldungen zurückgreifen kann.


QMake oder automake basierte Vorlage?

Ciao,
_

toblinger
19-11-2004, 13:34
Den Befehl qmake benutze ich nicht. Stattdessen starte ich die gesamte Prozedur mit automake & Konsorten usw. .
Wie ich nun aus einem Tutorial erfahren habe, sollte man es vermeiden, den Code der uic-Dateien zu verändern. Vielleicht liegt darin mein Fehler, was die mißglückten Kompilierungsversuche angeht.

Deinen Vorschlag mit der QButtongroup werde ich beherzigen. Vielen Dank.

Grüße,

Toblinger