QT学习5:组装积木

 
#include <QApplication>//在每一个使用QT的应用程序中都必须使用QApplication,它管理了各种
//应用程序的广泛资源,比如默认字体和光标
#include <QPushButton.h>//经典的图形用户界面按钮,QWidget,可以显示一段文本或QPixmap
#include <QFont.h>//QT中的字体
#include <QLCDNumber.h>//顾名思义,像LCD一样显示数字的widget吧!
#include <QSlider.h>//滑动条
#include <QVBoxLayout>

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

};

MyWidget::MyWidget(QWidget* parent, const char *name)
:QWidget(parent, name)
{
	//quit是局部变量,当MyWidget被删除时,默认它也被删除了,所以MyWidget不需要一个析构函数
	//当然,你也可以选择去删除它
	//QPushButton(const QString &text, QWidget *parent, const char* name);
    QPushButton *quit = new QPushButton("Quit", this, "quit");
	quit->setFont(QFont("Times", 18, QFont::Bold));

    //qApp指的就是QApplication的指针。
	connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));

	//--------------------------------------------------------
	// 要显示的位数是2就只能显示到99,
	// 以后不显示了,是3就只能显示到999,
	// 而且display变化太快,显示位数太少,比如0-999变化,
	// 如果设置为1,直接拖动滑动条超出9,可能就一直显示成0了
	// -- hgy notes.
	//--------------------------------------------------------
	QLCDNumber *lcd = new QLCDNumber(1, this);

	//Horizontal:水平
	QSlider *slider = new QSlider(Qt::Orientation::Horizontal, this);
	//设置范围
	slider->setRange(0, 99);
	//设置当前位置
	slider->setValue(0);

	//slider位置的改变值传给lcd的display
	connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));

	//比如lcd只能显示1位,那么display接收到slider的数据大于9后,就overflow了。
    connect(lcd, SIGNAL(overflow()), qApp, SLOT(quit()));

	//这里还是用Q4的QVBoxLayout,它不是基于QWidget的,所以QWidget要调用它
	//就要用setLayout,而且运行程序会发现,addWidget最先的会显示在最上面.
	QVBoxLayout *layout = new QVBoxLayout();
	layout->addWidget(slider);
	layout->addWidget(lcd);
	layout->addWidget(quit);
	setLayout(layout);

}

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);//argc是命令行变量的数量,argv是数组,C、C++特征

	MyWidget w;

	//设置窗口大小..
	//w.setGeometry(100, 100, 200, 200);
	w.move(100, 100);
	a.setMainWidget(&w);
	w.show();

	return a.exec();//控制转给QT,在exec中,QT接收并处理用户和系统的事件并把它们传给适当的窗口部件
}

1.QLCDNumber(uint numDigits, QWidget* parent, const char* name);第一个参数是numDigits代表要显示的位数,1就是1位数,那么display中传的数大于1位就溢出了,

2.比如slider传的值一下子从0跳到2位数,那么QLCDNumber会一直显示它最初的值0(因为它只显示1位,第二个数已溢出)

原文地址:https://www.cnblogs.com/hgy413/p/3693721.html