2010-07-15 41 views
0

我有這樣的片斷代碼:QT具體實施

#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(); 
} 

當我到達區間的最大值,我要退出,我怎麼能實現這個with signals and slots,在此先感謝

回答

1

添加一個多插槽功能您MyWidget類,例如on_maximum_exit(int)這樣的:

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

定義新的功能:

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

MyWidget consctuctor,後connect(slider, SIGNAL(valueChanged(int)),...地址:

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

,當然還有使用Qt文檔!

+0

在這一行中,我有兩個問題:價值==滑塊 - >最大(),滑塊沒有在範圍內定義,第二,即使我把它改爲999後,它不起作用,請問你能解釋爲什麼? – wantSTUDY 2010-07-15 16:53:01

+0

是的,你需要先在你的課堂上預定義「滑塊」。在'public'字和代碼生效之後,在你的類中添加'QSlider * slider';'slider = new QSlider(Qt :: Horizo​​ntal);'; – mosg 2010-07-15 18:38:39

0

就像我在另一個帖子中說這應該爲你工作:

的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(); 
}