PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : über push button lcd und slider ändern..



schweinebär
28-10-2003, 14:58
hidiho,


also ich habe folgendes problem, zu dem ich keine lösung gefunden hab (google+hier suchmaschine):

ich habe eine lcd-anzeige, die man mit einem slider verschieben kann.

die anzeige und der slider sind von anfang an auf den wert 50 gestellt.

dann habe ich einen knopf gemacht, auf den man drücken können soll und der dann den slider und die anzeige auf 25 stellt...das funktioniert allerdings nicht.

also hier erstmal der quelltext:

#include <qapplication.h>
#include <qpushbutton.h>
#include <qobject.h>
#include <qslider.h>
#include <qlcdnumber.h>
#include <qfont.h>
#include <qvbox.h>

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

MyWidget::MyWidget( QWidget *parent, const char *name )
: QVBox( parent, name )
{
QPushButton * quit = new QPushButton( "Quit", this, "quit" );
quit->setFont( QFont( "Times", 18, QFont::Bold ) );

QObject::connect( quit, SIGNAL(clicked()), qApp, SLOT(quit() ) );

QLCDNumber * lcd = new QLCDNumber( 2, this, "lcd");
lcd->display( 50 );

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

QObject::connect( slider, SIGNAL(valueChanged(int)), lcd, SLOT( display( int ) ) );

QPushButton * fuenfzw = new QPushButton( "&Slider auf 25", this, "fuenfzw");
QObject::connect( fuenfzw, SIGNAL(clicked()), lcd, SLOT( display( 25 ) ) );
QObject::connect( fuenfzw, SIGNAL(clicked()), slider, SLOT( setValue ( 25 ) ) );
}


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

MyWidget w;
App.setMainWidget( &w );
w.show();
return App.exec();
}

wenn ich aber z.b.

[...]slider, SLOT( addStep() ) );[...]
mache, funktioniert der knopf...

auf der qt seite steht ja auch, dass addStep und setValue public slots sind, also müsste es doch eigentlich so funktionieren...

naja...schonmal vielen dank für eure hilfe

anda_skoa
28-10-2003, 17:35
Die SIGNAL und SLOT Macros erwarten eine Methoden Sigantur, also Name und Typen der Parameter.

Man kann da weder Parameternamen, noch Werte angeben, das connect() stellt nur die Verbindung her, die Werte kommen aus dem Signal, falls vorhanden.
Darum muss das Signal immer mindestens so viele Parameter haben, wie der Slot.

Du müsstest bei deinem Programm beim Starten eine entsprechende Fehlermeldung in der Konsole haben.

Die Lösung für dein Problem ist ein kleiner Slot



QObject::connect( fuenfzw, SIGNAL(clicked()), this, SLOT( setSlider() ) );




void MyWidget::setSlider()
{
slider->setValue(25);
}


"slider" muss dazu natürlich eine Membervariable der Klasse MyWidget sein, sonst ist sie in setSlider nicht mehr bekannt.

Das slider->setValue() löst dann eh auch das Slider Signal aus, die LCD Anzeige wird also automatisch upgedatet.

Ciao,
_