ich versuch grad das SLOT/SIGNAL Konzept zu verstehen und hab mir dazu eines der Beispiele aus dem Tutorial geholt. Dort hab ich einen Slider und einen Button drin. Die Schrift des Button soll sich mit dem hochschieben des Sliders vergrößern.
Nun dachte ich mein definiertes SIGNAL wurde von dem moc irgendwie intererpretiert und umgesetzt, aufejdenfall kommt beim kompilieren die meldung das mein signal aufruf in meinem slot nicht bekannt ist.
Undefined symbols:
"MyWidget::changed(int)", referenced from:
MyWidget::resize(int) in main.o
ld: symbol(s) not found
Mein Beispielcode sieht so aus
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);
public slots:
void resize(int newSize);
signals:
void changed(int);
private:
QPushButton * quit;
int x;
};
void MyWidget::resize(int newSize)
{
if (x < 36)
{
x *= newSize;
quit->setFont(QFont("Times", x, QFont::Bold));
emit changed(newSize); // <---------- Den Aufruf kennt er nicht - wieso?
}
}
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
x = 18;
quit = new QPushButton(tr("Quit"));
quit->setFont(QFont("Times", x, QFont::Bold));
QLCDNumber *lcd = new QLCDNumber(2);
lcd->setSegmentStyle(QLCDNumber::Filled);
QSlider *slider = new QSlider(Qt::Horizontal);
slider->setRange(1, 2);
slider->setValue(1);
connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
connect(slider, SIGNAL(valueChanged(int)),
lcd, SLOT(display(int)));
connect(slider, SIGNAL(changed(int)), this, SLOT(resize(int)));
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(quit);
layout->addWidget(lcd);
layout->addWidget(slider);
setLayout(layout);
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}
http://doc.trolltech.com/4.3/signalsandslots.html
gibt da nicht soviel her.