Signal & Slots

Verschiedenes zu Qt
Antworten
RED Squirrel
Beiträge: 50
Registriert: 3. Februar 2007 22:21

Signal & Slots

Beitrag von RED Squirrel »

Das wurde hier sicher schon 10.000 x gefragt, und beantwortet, aber ich habe nur eine gaaaanz kleine Frage (glaube ich), die ich auch nach der Foren & Google suche, nicht beantwortet kriege.

Ich habe eine connection Verbindung:

Code: Alles auswählen

connect(reset, SIGNAL(clicked()), lcd, SLOT(lcd0()));
und die dazugehörige Funktion: lcd0:

Code: Alles auswählen

void MyWidget::lcd0()
      {
      this -> lcd ->setValue(0);
      } 
Die Klasse, habe ich hier erstellt (mir fehlt das richte Wort):

Code: Alles auswählen

 class MyWidget : public QWidget
 {
 public:
     MyWidget(QWidget *parent = 0);

 private:
         void lcd0(); 
         
         
 };
Jetzt ist meine Große Frage:

Wie kann ich auf: lcd ->Display(0); zugreifen?

ich habe schon einiges probiert, aber finde nicht den "Pfad" zu lcd.

Bitte helft mir!

danke!

Red_Squirrel
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Deine Klassendefinition ist unvollständig. Du hast weder lcd definiert, noch hast du void lcd0(); als Slot angegeben...
RED Squirrel
Beiträge: 50
Registriert: 3. Februar 2007 22:21

Beitrag von RED Squirrel »

Das ist jetzt mein ganzer leicht geänderter (privat slot) code:

Code: Alles auswählen

 #include <QApplication>
 #include <QFont>
 #include <QLCDNumber>
 #include <QPushButton>
 #include <QSlider>
 #include <QVBoxLayout>
 #include <QWidget>


 class MyWidget : public QWidget
 {
 public:
     MyWidget(QWidget *parent = 0);

 private slot:
         void lcd0(); 
         
         
 };

 MyWidget::MyWidget(QWidget *parent)
     : QWidget(parent)
 {
     QPushButton *quit = new QPushButton(tr("Quit"));
     quit->setFont(QFont("Times", 18, QFont::Bold));

     QPushButton *reset = new QPushButton(tr("Reset"));
     reset->setFont(QFont("Times", 18, QFont::Bold));

     QLCDNumber *lcd = new QLCDNumber(2);
     lcd->setSegmentStyle(QLCDNumber::Flat);
     lcd->display(0);
     QSlider *slider = new QSlider(Qt::Horizontal);
     slider->setRange(0,99);
     slider->setValue(0);

     connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
     connect(reset, SIGNAL(clicked()), lcd, SLOT(lcd0()));
     connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
     

     QVBoxLayout *layout = new QVBoxLayout;
     layout->addWidget(quit);
     layout->addWidget(reset);
     layout->addWidget(lcd);
     layout->addWidget(slider);
     setLayout(layout);
 
 }

      void MyWidget::lcd0()
      {
      this -> lcd ->display(0);
      } 


 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     MyWidget widget;
     widget.show();
     return app.exec();
}
es geht trotzdem nicht, wie kann ich denn lcd als Klasse definieren? oder was fehlt da noch?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Bitte beschäftige dich mit C++-Grundlagen, daß hier ist ein Qt-Forum
RED Squirrel
Beiträge: 50
Registriert: 3. Februar 2007 22:21

Beitrag von RED Squirrel »

das mache ich gerade... aber trotzdem würde ich gerne wissen, was an dieser Zeile

Code: Alles auswählen

      this -> lcd ->display(0); 
falsch ist, oder wenn es mehr Fehler gibt, was ich in C++ lernen muss.

Danke & lg. Red_Squirrel
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich kann es nicht lassen, sorry

- lcd ist in MyWidget::lcd0() nicht vorhanden - wie willst Du dann darauf zugreifen? -> C++ lernen!
- eine Header-Definition im Source ist für Anfänger nicht gut, schon gar nicht wenn man Signals/Slots verwendet
- Du hast Dich nicht mit Signals/Slots beschäftigt, sonst würde Q_OBJECT nicht fehlen
- this-> ist unnötig
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RED Squirrel
Beiträge: 50
Registriert: 3. Februar 2007 22:21

Beitrag von RED Squirrel »

so! ich habe das jetzt mit der externen header Datei, und mit Q_OBJECT hinbekommen. Auch sehe ich ein, dass lcd, in lcd0(), nicht vorhanden ist.

Aber was muss denn dann in der lcd0() stehen, damit die lcd - Anzeige auf 0 gesetzt wird?

lg. Red
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code: Alles auswählen

lcd->display(0);
RED Squirrel
Beiträge: 50
Registriert: 3. Februar 2007 22:21

Beitrag von RED Squirrel »

ich will nicht irgendwie nerven, aber kannst du mir vlt. Lektüre zu diesem Thema sagen, oder ein Stichwort, nachdem ich in meinen Büchern suchen kann?

es kommt gerade die Meldung:
`lcd' undeclared (first use this function)
also dürfte er in der Funktion nicht checken, wo, oder was lcd ist.

deshalb hatte ich so 2 Lösungsansätze:

1. ich gebe eine art Pfad an, also sowas wie: MyWidget::MyWidget -> lcd

2. ich muss lcd noch irgendwo deklarieren.
Nur hatte ich da keine Ahnung wo.


vielen dank für eure Hilfe!

Red
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Geltungsbereich von Variablen...
RED Squirrel
Beiträge: 50
Registriert: 3. Februar 2007 22:21

Beitrag von RED Squirrel »

ich habs geschafft (ich bin echt blöd :D) ich muss natürlich lcd auch angeben.

vielen dank für eure Hilfe!
Antworten