Zugriff auf Elemente meines MainWindows

Alles rund um die Programmierung mit Qt
Antworten
justsmile
Beiträge: 15
Registriert: 1. Juni 2007 11:57

Zugriff auf Elemente meines MainWindows

Beitrag 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
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag 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
justsmile
Beiträge: 15
Registriert: 1. Juni 2007 11:57

Beitrag von justsmile »

danke für die info, werd ich gleich mal probieren.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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...)
justsmile
Beiträge: 15
Registriert: 1. Juni 2007 11:57

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code?
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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
.........................
speack português italiano deutsch english castellà qt
justsmile
Beiträge: 15
Registriert: 1. Juni 2007 11:57

Beitrag 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();
}
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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.
justsmile
Beiträge: 15
Registriert: 1. Juni 2007 11:57

Beitrag 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.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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)
justsmile
Beiträge: 15
Registriert: 1. Juni 2007 11:57

Beitrag 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 :)
Antworten