Objekt vererben

Alles rund um die Programmierung mit Qt
Antworten
Funthomas
Beiträge: 11
Registriert: 2. September 2004 20:09

Objekt vererben

Beitrag von Funthomas »

:roll:

Hi, ich bin's mal wieder. Probleme reissen ja nicht ab, also hab ich heute ne neue Frage an das allmächtige Forum :)
ich habe ein QVariant Objekt erzeugt :

Code: Alles auswählen

void form1::ausgabeRadio(int wert )
{
 
    int a = wert;
    QVariant radioB(a);
    QString s = radioB.toString();
    
    QMessageBox::warning( this, "Test",s);
    
    
}
Der Sinn ist, dass er mir den WErt 0 oder 1 ausgibt. 0 für radioButton 1 und 1 für RadioButton2. Nun möchte ich diesen Wert (0 oder 1) in einer anderen Funktion nochmal aufrufen und überprüfen mit einer Switch - Case Anweisung. Das Problem ist ja, das die Variablen ja nur in einer Funktion existent sind. Daher dacht ich mir, dass ich einfach ein Objekt an einer andere Funktion übergebe. Mein Problem liegt nun bei der richtigen vererbung des Objektes , da ich mein Objekt "radioB" in einer anderen Funktion für eine Switch - Case Anweisung brauch. Ich dachte mal so:

Code: Alles auswählen


void form1::printSinus() 

 .....

   int f = ausgabeRadio().radioB;    // hier wollte ich mein Objekt von meiner anderen Funktion in f speichern

switch (f)
{
  case 0:
            /* Anweisungen */
  break ;

  case 1:
            /* Anweisungen */
  break ;

  default : /* Anweisungen */
}

Wie ist nun die richtige Schreibweise für die Vererbung ????

THX
Funthomas
Face down Ass up, that's the way we like to ... dance ;)
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

Hi Funthomas,

das was du da machen willst hat leider nix mit Vererbung zutun.
Wenn du allerdings dein QVariant Objekt (radioB) in einer anderen Methode (printSinus()) deiner form1-Klasse verwenden willst, dann solltest du radioB besser als Member in die Definition deiner form1-Klasse aufnehmen.
Somit hast du dann die Moeglichkeit in allen Methoden deiner Klasse darauf zuzugreifen.

Goos
Funthomas
Beiträge: 11
Registriert: 2. September 2004 20:09

Beitrag von Funthomas »

:oops:

hmmm,
wie mache ich denn das??????

Bin Newbie....

Funthomas
Face down Ass up, that's the way we like to ... dance ;)
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

hmm...eigentlich solltest du, wenn du das noch nicht kannst erstmal ein C++ Buch nehmen und dich mit Klassen und allem was dazugehoert vertraut machen. Ansonsten glaube ich nicht, dass das Ganze wirklich zu irgendwas fuehrt.

Aber gut :) ... du hast irgendwo wahrscheinlich ein Hedaerfile fuer deine form1 Klasse. Dort findet sich dann irgendwo etwas in der Art:

Code: Alles auswählen

class form1: blabla
{
public: 
noch mehr blabla

private:
hier sollte dann dein QVariant radioB hin :)
};
Da musst dein radioB dann nur entsprechend einfuegen und gut is.

Goos (wuenscht noch viel Erfolg :) )
lori
Beiträge: 16
Registriert: 9. August 2004 13:06

Beitrag von lori »

Hi Funthomas,
wenn ich das richtig verstanden habe, dann hängt das jetzige Problem mit dem alten Problem zusammen und betrifft das gleiche Programm bzgl. sinus kurve etc., oder? Wieso machst Du dann nicht einfach zwei QSlider oder alternativ oder zusätzlich kannst du auch Buttons erzeugen "<", ">" etc. zum Werte ändern. Desweiteren würde ich das Layout per Hand erstellen und nicht den Designer verwenden, so arbeitet man sich leichter ein.
Funthomas
Beiträge: 11
Registriert: 2. September 2004 20:09

Beitrag von Funthomas »

hi,
nein lori, dass hat nichts mehr mit den Slidern zu tun. Das mit den Slidern hab ich hinbekommen. Nun will ichauf ein Objekt einer anderen Klasse zugreigfen und kriege das mit der Syntax nicht hin.

:?
Face down Ass up, that's the way we like to ... dance ;)
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag von pm_Snake »

Also, angenommen du hast die klasse:

class MyWidget : public QWidget
{
<konstruktor / destruktor>

QVariant m_radiobut1;
QVariant m_radiobut2;
};

( versteh zwar nicht warum du da QVariant willst, aber ok )

und du wilst nun von irgendeiner funktion drauf zu greifen

erzeuge erst ne variable vom datentyp <mywidget>
MyWidget *w = new MyWidget();

nun kannst du mit w->m_radiobut1 auf die Membervariable zugreifen.

-------

Leider verlaber ich mich oft beim erklären, weiss daher nicht ob du es verstehst. Wenns probleme gibt einfach nochmal schreiben, dann paste ich ein längeres Beispiel...

greetz

pm_Snake

edit:

oder bei dir eben

class form1 : blub
{

QVariant m_radiobut1;
}

nun kannst du in jeder memberfunktion von form1 ( form1:: ) mit this->m_radiobut1 auf die Variable zugreifen.

Falls du aber nur prüfen willst welcher von den beiden Buttons gecheckt ist würde ich dir eine QButtonGroup empfehlen oder aber die Membervariablen lieber vom typ QRadioButton deklarieren und dann per ->isChecked() abfragen ob sie aktiv sind oder nicht


-----------

nochmal edit:
----

mach es folgendermaßen. in deiner klasse form 1 schreibst du irgendwo unter der konstruktor-definition :

QRadioButton* m_radio1;
QRadioButton* m_radio2;

Wenn du im Code dann deine Buttons erzeugst ( hoffentlich Pointer, sonst muss das * oben wieder weg ) merkst du dir die Radios in den Membervariablen

->

QRadioButton* button1 = new bla; // Deine buttondeklaration
m_radio1 = button1; // speichern des Buttons in membervariable

QRadioButton* button2 = nwe bla;
m_radio2 = button2;

in der Funktion Sinus machst du einfach folgendes:

if( this->m_radio1->isChecked() )
// Anweisung wenn radio1 true ist

if( this->m_radio2->isChecked() )
// Anweisung wenn radio2 true ist

wenn du nur diese 2 Radios hast und einer davon exclusive ( nur immer einer davon aktiv ) dann kannst du dir das zweite if sparen und ein else draus machen, da ja dann der andere aktiv sein muss.

bei weiteren fragen
170155133

icq, hab heute @ work zeit ;)

edit 3:

und überhaupt, die rufst eigenschaften / methoden etc eines Objektes durch:

Objektname + . oder -> ( je nachdem ob objekt oder pointer ) + methodenname / eigenschaft

bsp:

Die Eigenschaft Farbe der Klasse Auto

Auto.Farbe ( wenn Objekt )
Auto->Farbe ( wenn Pointer )

Die Methode start der Klasse Auto

Auto.starteMotor() ( objekt )
Auto->starteMotor() ( pointer )

ist natürlich nur eine Beispielklasse
Funthomas
Beiträge: 11
Registriert: 2. September 2004 20:09

Beitrag von Funthomas »

Hi ,

super Tipps von euch.
Zum Thema :

Habe im Designer QVariant radioB als member unter den Class Variables eingetragen. Nun habe ich diese in meine Switch - Case Anweisung eingetragen

Code: Alles auswählen


	switch (this->radioB.toInt() ) //habe zu Integer gemacht da sonst Fehler
	{                                          
	case 0:
	     QMessageBox::warning( this, "Test"," ....0......");   
	break;
                case 1:
	 QMessageBox::warning( this, "Test",".......1.......");   
	break;
               }
Soweit so gut. Hat auch wunderbar geklappt, doch er wirft mir jedesmal die QMessagebox mit der ....0.... aus. egal welchen Radiobutton ich angeklickt habe. Was läuft da schief ?????? :shock:
Face down Ass up, that's the way we like to ... dance ;)
Funthomas
Beiträge: 11
Registriert: 2. September 2004 20:09

Beitrag von Funthomas »

habs doch mit ischecked() hinbekommen

Code: Alles auswählen

 
	if( radioButton1->isChecked() ) 
	v.y = sin((zA+zB)*v.x);     //Aktuelle Formel
	if( radioButton2->isChecked() ) 
	v.y = cos((zA+zB+zC)*v.x);     //Aktuelle Formel
	
	    plotWindow->setValue( i, v );
	    i++;
	}
	
	plotWindow->plotIt();
	
	plotWindow->show();
    }

danke jungs
Face down Ass up, that's the way we like to ... dance ;)
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag von pm_Snake »

Hihi, haben wir's ja doch noch geschafft. Ich sagte doch gleich QRadioButton ;)
Antworten