Seite 1 von 1

Fader value in QLineEdit anzeigen

Verfasst: 24. Oktober 2007 10:25
von Ozzy
Hi,

ich bin absoluter qt-Neuling, und stehe vor einem Problem: und zwar würde ich gerne den Wert eines Faders in einem QLineEdit-Feld anzeigen lassen. Ich habe hier schon etwas im Forum gefunden, aber ich bekomme es einfach nicht hin:

Code: Alles auswählen

#include <qapplication.h>
#include <qpushbutton.h>
#include <qslider.h>
#include <qlineedit.h>

#include <qvbox.h>

class MyWidget : public QVBox
{
public:
    MyWidget( QWidget *parent=0, const char *name=0 );

public slots:
	void changeValueSlot(int value);

	QLineEdit *line;
};


MyWidget::MyWidget( QWidget *parent, const char *name )
        : QVBox( parent, name ) {

    QSlider * slider = new QSlider( Horizontal, this, "slider" );
    slider->setRange( 0, 99 );
    slider->setValue( 0 );

	line = new QLineEdit(this);
	QPushButton *quit = new QPushButton( "Quit", this, "quit" );

	qWarning("Hello");

	QObject::connect( slider, SIGNAL(valueChanged(int)), line, SLOT(changeValueSlot(int) ) ); 
    connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
}

void MyWidget::changeValueSlot(int value) {
	line->setText(QString::number(value));
} 

int main( int argc, char **argv ) {
    QApplication a( argc, argv );

    MyWidget w;
    a.setMainWidget( &w );
    w.show();
    return a.exec();
}
Doch wenn ich das nun ausführen möchte, klappt es nicht. Unten in der Konsole steht dann immer:
QObject::connect: No such slot QLineEdit::changeValueSlot(int)
QObject::connect: (sender name: 'slider')
QObject::connect: (receiver name: 'unnamend')

Wisst Ihr, wie ich das hinbekommen kann?

MfG, und vielen Dank schon einmal, Ozzy

Falscher Slot

Verfasst: 24. Oktober 2007 11:24
von shaka
Dein Slot gehört zu MyWidget, deshalb mußt Du auch damit connecten, nicht mit der QLineEdit-Instanz. Versuch mal:

connect( slider, SIGNAL(valueChanged(int)), this, SLOT(changeValueSlot(int) ) );

Verfasst: 24. Oktober 2007 11:29
von Ozzy
Hi,

wenn ich "this" benutze, sagt er mir:

No such slot QVBox::changeValueSlot(int)


Hast Du dafür vielleicht auch noch eine Idee???

MfG, Ozzy

Verfasst: 24. Oktober 2007 12:47
von macman
Sagt Dir MOC etwas?

Verfasst: 24. Oktober 2007 12:51
von Ozzy
Nein...

Verfasst: 24. Oktober 2007 13:32
von Christian81
Warum fangen die Leute einfach mit Programmieren an ohne sich auch nur die Grundlagen durchgelesen zu haben? Man kann auch nicht Auto fahren bevor man sich schlau gemacht hat wie es geht... :(

Arbeite bitte das Qt-Tutorial durch. Dort ist alles gut beschrieben!

Verfasst: 24. Oktober 2007 15:51
von Ozzy
Hi,

das hatte ich mir durchgelesen.
Mein Problem ist, dass ich nicht weiß, ich wie die Ebene richtig referenziere... "this" ist es nicht, weil es dann auf QVBox zeigt. Ich weiß einfach nicht, wie ich auf die Klasse MyWidget zeige, und das habe ich nicht in der Anleitung gefunden...

MfG, Ozzy

Verfasst: 24. Oktober 2007 15:57
von Christian81
Ich würde sagen dann lies Dir das nochmal genauer durch... :(

Ggf. auch das falls Du es noch nicht gefunden hast!

Verfasst: 24. Oktober 2007 17:34
von Ozzy
Sorry, aber ich verstehe das echt nicht!
Wenn ich das Q_OBJECT hinzufüge, bekomme ich nun die Fehlermeldung:
undefined reference to 'vtable for MyWidget'

Bitte hilf mir noch einmal, ich stehe echt auf dem Schlauch!!!

Verfasst: 24. Oktober 2007 17:58
von Christian81
Na endlich... und jetzt bitte die Forum-Suche noch nutzen lernen, dann hätte sich das auch hne Fragen erledigt.

qmake muss nochmal ausgeführt werden damit die moc-Aufrufe erzeugt werden.

Verfasst: 24. Oktober 2007 19:27
von Ozzy
Also ich habe jetzt die Suche mehr als benutzt. Habe KDevelop neu installiert (3.5). Unter C++ Support -> Qt Options ist Qt eingetragen, und wenn ich im QMake Manager ein "Rebuild Project" mache, dann kommt der Fehler trotzdem wieder, entgegen der Einträge hier im Forum...

Hast Du da vielleicht noch eine Idee?

Verfasst: 24. Oktober 2007 19:33
von Christian81
Was für ein Fehler?
ist die Headerdatei auch im pro-File unter HEADERS eingetragen?

Verfasst: 24. Oktober 2007 20:08
von Ozzy
Hi,

also bisher hat das Projekt gar keine Header; die habe ich mir gespart, da die Datei (wie man sieht) noch so klein ist...

Verfasst: 24. Oktober 2007 20:24
von Christian81
Und Du willst mir wirklich erzählen das Du das Tutorial durchgearbeitet hast? :roll:

Eine Klassendefinition muss in den Header, vor allem wenn Q_OBJECT drin vorkommt (es geht auch anders, aber das gehört nicht hier her). Sonst wird das nichts mit moc

Verfasst: 25. Oktober 2007 08:56
von Ozzy
Jo,

vielen, vielen Dank; jetzt klappt es auch bei mir!!! Ich hatte vorher schon eine Header erzeugt, aber das funktionierte nicht, da ich leider vergessen hatte, die richtige Header zu includen... Das stand nämlich noch in de C-Datei.

Blind vom Programmieren...

Trotzdem vielen, vielen Dank, Ozzy