Anzeige:
Ergebnis 1 bis 2 von 2

Thema: über push button lcd und slider ändern..

  1. #1
    schweinebär
    Gast

    Question über push button lcd und slider ändern..

    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:
    Code:
    #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.
    Code:
    [...]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

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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

    Code:
    QObject::connect( fuenfzw, SIGNAL(clicked()), this, SLOT( setSlider() ) );
    Code:
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •