zugriff auf objekte (ist eine dummmme frage...)

Alles rund um die Programmierung mit Qt
Antworten
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

zugriff auf objekte (ist eine dummmme frage...)

Beitrag von slash-ex »

also ich hab imho nichts groß dazu gefunden und mein armes linux funzt jetzt auch nicht so richtig....
aber zum eigentlichen problem, es ist recht basic (und hoffentlich im richtigen forum):

wenn ich im qt designer ein objekt zum beispiel ein led mit dem namen "lampe" erstelle.
dann kann ich darauf in der projektabhängigen header datei(z.b. form1.ui.h)
mit "lampe->set..." usw zugreifen.
ich habe nun aber die erfahrung gemacht das in deiesem sinne der zugriff in der hauptfunktion(main.cpp) etwas anders aussieht. dort wird "lampe" nicht gefunden.
außerdem ist mir aufgefallen das wenn ich die farbe ändern will statt setColor(red) ein setColor(QT::red) nötig ist oder statt kSystemTray(this,....)
ein ksystemtray(&fenster..., ...)?!

ich bin anfänger habe mehr oder weniger noch nicht die richtigen kenntnisse bezüglich klassen und zeiger, aber es wär ja nicht schlecht wenn es ein buch geben würde was auch diese fragen hbehandeln würde :idea:

kann mir vielleicht jemand weiterhelfen, mfg slash.
Hans
Beiträge: 9
Registriert: 26. Februar 2005 18:26
Kontaktdaten:

Re: zugriff auf objekte (ist eine dummmme frage...)

Beitrag von Hans »

slash-ex hat geschrieben:wenn ich im qt designer ein objekt zum beispiel ein led mit dem namen "lampe" erstelle.
Tatsächlich ein Objekt, oder eine Klasse?
dann kann ich darauf in der projektabhängigen header datei(z.b. form1.ui.h)
mit "lampe->set..." usw zugreifen.
ich habe nun aber die erfahrung gemacht das in deiesem sinne der zugriff in der hauptfunktion(main.cpp) etwas anders aussieht. dort wird "lampe" nicht gefunden.
Um auf nichtstatische Funktionen einer Klasse zuzugreifen musst Du erst ein Objekt dieser Klasse instantiieren. Dies wird in Deiner main() offensichtlich nicht gemacht.
außerdem ist mir aufgefallen das wenn ich die farbe ändern will statt setColor(red) ein setColor(QT::red) nötig ist oder statt kSystemTray(this,....)
ein ksystemtray(&fenster..., ...)?!
Sind wir immernoch in der main()?
Zu 1.: Du könntest "using namespace QT" oder "using QT::red" schreiben. Allgemein ist es ungeschickt, einen kompletten Namespace in den globalen Namespace aufzunehmen, wenn Du nur wenige Elemente daraus benötigst.
Zu 2.: main() ist keine Funktion eines Objekts, hat demnach keinen this pointer.
ich bin anfänger habe mehr oder weniger noch nicht die richtigen kenntnisse bezüglich klassen und zeiger, aber es wär ja nicht schlecht wenn es ein buch geben würde was auch diese fragen hbehandeln würde :idea:
Ein Buch zu den Grundlagen von C++ währe hier angebracht. Ich habe C++ aus dem "Bjarne Stroustrup" gelernt, hatte allerdings bereits Erfahrung von anderen Programmiersprachen her.
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

Code: Alles auswählen

int main( int argc, char ** argv )
{
   KCmdLineArgs::init(argc, argv, "keagle", "keagle", "0.1");
   KApplication a;
   Form1 w;
   a.setMainWidget(&w);
   w.show();
   a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
   
   
   KSystemTray* tray = new KSystemTray(&w, "Hallo");
   tray->setPixmap(QPixmap("network_traffic.png"));
   tray->show();
   if(tray->isVisible())
       w.hide();
   

   if(status_adsl() == 'r'){
       lampe->setState(KLed::On);
       lampe->setColor(Qt::green);
   }
}
das ich 'lampe' instantizieren muss sagt mir auch der compiler. nur wie soll ich in der main eine KLASSE instantizieren die schon vom designer nen namen etc besitzt?
ich weiß klingt dumm aber ist sicher einfach?
und das mit dem namespace hat mich verwirrt weil ich dachte das die überall nicht nur in der main.cpp anwendbar sein müssten.
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

ich will doch nur diesen code zum programmstart ausführen. doch ich bekomm immer nen fehler. wie kann ich diese funktion denn nun ausführen?

Code: Alles auswählen

void Form1::SetLedStat()
{
  if(status_adsl() == 'r'){
      adsl_stat->setState(KLed::On);
      adsl_stat->setColor(green);
  }
  if(status_adsl() == 'o') {
      //adsl_stat->setState(KLed::Off);
      adsl_stat->setColor(red);
  }
  if(status_adsl() == 't'){
      //adsl_stat->toggleState (KLed::On, KLed::Off);
      adsl_stat->setColor(yellow);
  }
}
Hans
Beiträge: 9
Registriert: 26. Februar 2005 18:26
Kontaktdaten:

Beitrag von Hans »

Du hast in main() ein Objekt der Klasse Form1 mit namen w. Die Klassenfunktion SetLedStat() führst du damit aus mittels "w.SetLedStat();"
Antworten