您的位置:首页 > 编程语言 > Qt开发

QT学习7:1个事物领导另一个

2011-12-12 16:02 281 查看
LCDRange.h

#ifndef LCDRANGE_H_
#define LCDRANGE_H_

#include <QWidget.h>

class QSlider;

class LCDRange:public QWidget
{
Q_OBJECT
public:
LCDRange(QWidget* parent=NULL, const char *name=NULL);
int value() const;

public slots:
void setValue(int);

signals://信号只声明,不能定义.
void valueChanged(int);

private:
QSlider       *slider;

};

#endif//LCDRANGE_H_


LCDRange.cpp

#include "LCDRange.h"
#include <QSlider.h>
#include <QLCDNumber.h>
#include <QVBoxLayout>

LCDRange::LCDRange(QWidget* parent, const char *name)
:QWidget(parent, name)
{
QLCDNumber *lcd = new QLCDNumber(2, this);
slider = new QSlider(Qt::Orientation::Horizontal, this);
slider->setRange(0, 99);
slider->setValue(0);

//别把display(int)写成Display(int)了,不然不会响应的,而且你就算写成display1,
//编译器也不会报错,只是不响应
//
connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));

//信号-->类的信号-->
connect(slider, SIGNAL(valueChanged(int)), SIGNAL(valueChanged(int)));

QVBoxLayout *vlayout = new QVBoxLayout;
vlayout->addWidget(lcd);
vlayout->addWidget(slider);

setLayout(vlayout);
}

int LCDRange::value() const
{
return slider->value();
}

void LCDRange::setValue(int value)
{
slider->setValue(value);
}


main

#include "qtlesson.h"
#include <QtGui/QApplication>
#include <QPushButton.h>
#include <QFont.h>
#include <QVBoxLayout>
#include <QGridLayout>
#include "LCDRange.h"

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

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

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

QVBoxLayout *vlayout = new QVBoxLayout;

//QGridLayout,这里和列有关,比如(6,12),因为才12个,那就网格成一行了,
QGridLayout *grid = new QGridLayout(6, 12);

LCDRange *previous = 0;
for (int r=0; r<3; r++)
{
for (int c=0; c<4; c++)
{
LCDRange *lr = new LCDRange(this);
if (previous)
{
connect(lr, SIGNAL(valueChanged(int)), previous, SLOT(setValue(int)));
}

grid->addWidget(lr);
previous = lr;
}
}

vlayout->addWidget(quit);
vlayout->addLayout(grid);

setLayout(vlayout);
}

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
a.setMainWidget(&w);
w.show();

return a.exec();
}


1.QGridLayout,和列有关,比如(6,12),因为才12个,那就网格成一行了,

2.信号只声明,不能定义.一定义就提示错误

3.信号的调用可以通过emit valueChanged(xx)这样被其他调用

4.connect好像不做代码检查的,也就是无论SIGNAL()和 SLOT()中填的是不是已存在的函数,它都认为OK,编译通过
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: