Seite 1 von 1

Zugriff auf Elemente meines MainWindows

Verfasst: 16. Juni 2007 15:53
von justsmile
Hallo,

ich habe eine MainWindow Application und möchte nun von meiner Viewer Klasse aus den status eines radiobutton auslesen welcher in der mainform Klasse erstellt wurde.
Ich habe also mit dem Designer meine Oberfläche erstellt und daraus wurde dann die mainform.h und die mainform.cpp erstellt. Nun möchte ich halt auf den radiobutton der dort erstellt wird zugreifen und zwar aus meiner Klasse Viewer heraus.

Ich hoffe ihr habt verstanden was ich meine, ich weiß jetzt auch nicht wie ich das noch beschreiben kann. :o

Verfasst: 16. Juni 2007 17:51
von MichaelS
Moin,

erweitere Deine Mainwindow-Klasse um eine (public) Funktion, die Dir den Status des Radiobuttons zurückgibt, und übergib einen Pointer auf Deine Mainwindow-Klasse an die Viewer-Klasse. Über diesen Pointer kannst Du dann die Funktion aufrufen.

Gruß Michael

Verfasst: 16. Juni 2007 18:12
von justsmile
danke für die info, werd ich gleich mal probieren.

Verfasst: 16. Juni 2007 18:56
von upsala
Wenn es dir darum geht, den Status weiterzugeben, dann verwende die Signal-Slot-Funktionen, dafür sind sie da, ansonsten übergib einen Pointer auf den QRadioButton (womit wir bei C++-Grundlagen wären...)

Verfasst: 18. Juni 2007 17:12
von justsmile
Wenn ich einen einen Pointer auf den RadioButton übergebe dann sturzt mir mein Programm immer ab sobald ich z.B. den Test des RadioButton ändern will.
Das gleiche passiert wenn ich eine Funktion der MainForm Klasse aufrufen möchte.
Kompilieren kann ich und es läuft auch bis ich dann halt auf den RadioButton zugreifen möchte.
Irgend eine Idee?

Verfasst: 18. Juni 2007 18:02
von upsala
Code?

Verfasst: 19. Juni 2007 01:50
von patrik08
Weiter oben von MainWindow ist QApplication

class OS_application : public QApplication

und die hat waahnsinnging viele super event zum aufangen....

Und kann in jede tiefe zum lesen gehen....


http://wiki.qtcentre.org/index.php?titl ... OSX_Finder

Verfasst: 19. Juni 2007 09:50
von justsmile
Also das ist der Code aus meiner Viewer Klasse in der ich den Status der RadioButtons abfragen will. Wenn ich den Status abfragen will stürzt das Programm zwar nicht ab aber es gibt auch nicht den Status zurück. Aber wenn ich z.B. den den Text des Buttons andern will geht ist alles vorbei

Code: Alles auswählen

void FileViewer::setRotation()
{	
	QRadioButton *button =form->leftXradioButton;
	
	QRadioButton *button1 =form->stopXradioButton;

	button->setText("Text");
	if (button1->isChecked()) stopAnimation();
	if (button->isChecked()) startAnimation();
}

Verfasst: 19. Juni 2007 11:17
von solarix
Playing with pointers is like playing with fire..
Zirkuläre Abhängigkeiten riechen immer nach Designfehler..

2 Varianten:

1. höre auf upsala und nimm Slots/Signals

MainWindow: Signal "stateChanged"
MainWindow: Slot "getStateText"

Viewer : Slot "handleState"
Viewer : Signal"setStateText"

2. Falls noch viel mehr (ausser dem bool und string) getauscht werden muss, erstellst du besser eine "DatenKlasse" für die beiden Anzeigen und tauschst alle Informationen über eine Instanz dieser Klasse aus.

Verfasst: 19. Juni 2007 12:57
von justsmile
die sache ist das ich eigentlich nur den status wissen will, das mit dem text war nur mal ein beispiel.
mein problem ist das ich 9 radiobuttons habe und wenn ich einen radiobutton anklick hätte ich gern den status aller 9 übergeben.

Verfasst: 19. Juni 2007 13:18
von solarix
Naja das Prinzip bleibt das gleiche.. ein paar Vorschläge:
1. das MainWindow speichert sich die Zustände und sendet (Signal/Slot) bei jeder Änderungen alle Zustände an den Viewer (emit allStates (unsigned stateMask))
2. der Viewer speichert alle Zustände und kriegt vom Main (Signal/Slot) nur alle Änderungen ( stateChanged(unsigned btnNumber, bool state) )
3. MainWindow und Viewer haben eine gemeinsame Datenbasis (Zustandsklasse), Bei jeder Änderung setzt das MainWindow ein Signal ab (dataChanged()). So müsste nicht gepollt werden..

Bei 1 kannst du ja ein beliebiger Datentyp nehmen.. ein Struct, eine Klasse, oder sogar ein "unsigned" würde reichen (als Bitset verwendet)

Verfasst: 19. Juni 2007 13:37
von justsmile
super es klappt!!

ich habe es jetzt mit emit gemacht also dein erster vorschlag.
habe jetzt zwar alle status in ein string gepackt, geht bestimmt auch eleganter, aber das mach ich vielleicht noch.

danke nun kann ich weiter machen :)