Seite 1 von 1
Signal & Slots
Verfasst: 2. März 2007 15:49
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:
und die dazugehörige Funktion: lcd0:
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
Verfasst: 2. März 2007 16:23
von upsala
Deine Klassendefinition ist unvollständig. Du hast weder lcd definiert, noch hast du void lcd0(); als Slot angegeben...
Verfasst: 2. März 2007 16:28
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?
Verfasst: 2. März 2007 16:38
von upsala
Bitte beschäftige dich mit C++-Grundlagen, daß hier ist ein Qt-Forum
Verfasst: 2. März 2007 17:54
von RED Squirrel
das mache ich gerade... aber trotzdem würde ich gerne wissen, was an dieser Zeile
falsch ist, oder wenn es mehr Fehler gibt, was ich in C++ lernen muss.
Danke & lg. Red_Squirrel
Verfasst: 2. März 2007 18:41
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
Verfasst: 2. März 2007 19:35
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
Verfasst: 2. März 2007 19:37
von upsala
Verfasst: 2. März 2007 19:52
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
Verfasst: 2. März 2007 19:53
von upsala
Geltungsbereich von Variablen...
Verfasst: 2. März 2007 20:01
von RED Squirrel
ich habs geschafft (ich bin echt blöd

) ich muss natürlich lcd auch angeben.
vielen dank für eure Hilfe!