2010-07-15 6 views
0

Je cet extrait du code:qt mise en œuvre spécifique

#include <QApplication> 
#include <QFont> 
#include <QLCDNumber> 
#include <QPushButton> 
#include <QSlider> 
#include <QVBoxLayout> 
#include <QWidget> 

class MyWidget : public QWidget 
{ 
public: 
    MyWidget(QWidget *parent = 0); 
}; 

MyWidget::MyWidget(QWidget *parent) 
    : QWidget(parent) 
{ 
    QPushButton *quit = new QPushButton(tr("Quit")); 
    quit->setFont(QFont("Times", 18, QFont::Bold)); 

    QLCDNumber *lcd = new QLCDNumber(3); 
    lcd->setSegmentStyle(QLCDNumber::Flat); 

    QSlider *slider = new QSlider(Qt::Horizontal); 
    slider->setRange(0, 999); 
    slider->setValue(0); 

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

    connect(slider, SIGNAL(valueChanged(int)), 
      lcd, SLOT(display(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(); 
} 

quand je Longueurs max de l'intervalle, je veux arrêter, comment puis-je mettre en œuvre cette with signals and slots, merci à l'avance

Répondre

1

Ajouter une autre fente fonction de votre classe MyWidget, par exemple on_maximum_exit(int) comme ça:

class MyWidget : public QWidget 
{ 
public: 
    MyWidget(QWidget *parent = 0); 
public slots: 
    void on_maximum_exit(int); 
}; 

Définir une nouvelle fonction:

void MyWidget::on_maximum_exit(int value) 
{ 
    if (value == slider->maximum()) 
     close(); 
} 

Dans MyWidget consctuctor, après connect(slider, SIGNAL(valueChanged(int)),... ajouter:

/* ... */ 
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(on_maximum_exit(int))); 
/* ... */ 

Et bien sûr, utiliser Qt docs!

+0

J'ai deux problèmes, dans cette rangée: la valeur == slider-> maximum(), le curseur n'est pas défini dans la portée, et deuxièmement, même après que je l'ai changé en 999, cela ne fonctionne pas, pouvez-vous expliquer pourquoi? – wantSTUDY

+0

Oui, vous devez d'abord prédéfinir 'slider' dans votre classe. Ajouter le curseur 'QSlider *;' dans votre classe après le mot 'public' et le code juste vivre' slider = new QSlider (Qt :: Horizontal); '; – mosg

0

Comme je l'ai dit dans l'autre après cela devrait fonctionner pour vous:

main.cpp

#include <QApplication> 
#include "mywidget.h" 

int main(int argc, char *argv[]) 
{ 
QApplication app(argc, argv); 
MyWidget widget; 
widget.show(); 
return app.exec(); 
} 

mywidget.h

#ifndef MYWIDGET_H 
#define MYWIDGET_H 
#include <QWidget> 
#include <QObject> 
include <QPushButton> 
#include <QSlider> 

class MyWidget : public QWidget 
{ 
    Q_OBJECT 
    public: 
MyWidget(QWidget *parent = 0); 
~MyWidget(){}; 
    public slots: 
void getSliderValueAndQuit(); 
    private: 
QPushButton *quit; 
QSlider *slider; 
}; 

#endif // MYWIDGET_H 

myWidget.cpp

#include "mywidget.h" 
#include <QWidget> 
#include <QObject> 
#include <QApplication> 
#include <QFont> 
#include <QLCDNumber> 
#include <QPushButton> 
#include <QSlider> 
#include <QVBoxLayout> 

MyWidget::MyWidget(QWidget *parent) : 
QWidget(parent) 
{ 
quit = new QPushButton(tr("Quit")); 
quit->setFont(QFont("Times", 18, QFont::Bold)); 

QLCDNumber *lcd = new QLCDNumber(3); 
lcd->setSegmentStyle(QLCDNumber::Flat); 

slider = new QSlider(Qt::Horizontal); 
slider->setRange(0, 999); 
slider->setValue(0); 

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

connect(slider, SIGNAL(valueChanged(int)),lcd, SLOT(display(int))); 
connect(slider,SIGNAL(sliderReleased()), SLOT(getSliderValueAndQuit())); 

QVBoxLayout *layout = new QVBoxLayout; 
layout->addWidget(quit); 
layout->addWidget(lcd); 
layout->addWidget(slider); 
setLayout(layout); 
} 

void MyWidget::getSliderValueAndQuit(){ 
if(slider->value() == slider->maximum()) 
    close(); 
}