Qt学习日志 - 第一章
2009-11-12 22:22
603 查看
HelloQt
第一行和第二行包含类QApplication和QLabel的定义.对于每个Qt类,都有一个跟类名同名的头文件,里面包含了类的定义。
第5行创建一个QApplication对象,用来管理整个进程范围内的资源。QApplication类支持命令行参数作为其构造函数的参数。
第6行创建一个QLabelWidget(类似于Windows中的控件和容器的概念)来显示“HelloQt!”.Widget可以包含其他Widget.
第7行显示Label.Widgets刚创建好都是隐藏的,在显示之前我们可以对它们进行配置(customize).
第8行把程序的控制权交给Qt.至此,程序进入一个eventloop(事件循环)。这是一种待命(stand-by)状态,等待用户事件的发生,如鼠标点击或键盘按钮。用户操作产生事件(events),也叫messages,程序会对这些事件进行响应,在Qt平台中,这些都由Qt来做,编程人员可以不予考虑。例如,当用户点击一个widget时,会产生一个mousepress和一个mouserelease事件。
将以后代码保存为hello.cpp.
qmake–project产生hello.proproject文件
qmakehello.pro产生makefile.
make进行编译
将第6行改为QLabel*label=newQLabel(“<h2><i>Hello</i>”
“<fontcolor=red>Qt!</font></h2>”);
可以得到类似HTML格式显示。
第二个例子。
怎样响应用户的操作。程序由一个按钮组成,当用户按下按钮,程序退出。代码如下:
1#include<QApplication>
2#include<QPushButton>
3intmain(intargc,char*argv[])
4{
5QApplicationapp(argc,argv);
6QPushButton*button=newQPushButton("Quit");
7QObject::connect(button,SIGNAL(clicked()),
8&app,SLOT(quit()));
9button->show();
10returnapp.exec();
11}
Widget会发射信号(emitsignals)来指示用户的行为或一个状态已经改变。例如,QPushButton发射clicked()信号当用户按下这个按钮。一个信号可以被连接到一个槽函数(slot),这样当则个信号发射时这个槽函数就会自动执行。在我们的这个例子中,我们把按钮的clicked()信号与QApplication对象的quit()槽函数相连接。SIGNAL和SLOT是两个宏。
LayingoutWidgets.
对Widgets进行布局。在这部分,我们来学习怎么用Qt中的layout类来管理一个窗口中的多个widgets.
程序由三个widgets组成:QSpinBox,QSlider和QWidget.QWidget是程序的主窗口,QSpinBox和QSlider属于QWidget的children.QWidget是最上层的窗口,所以没有父窗口。QWidget的构造函数及其所有的子类都有一个QWidget的参数用来指定此QWidget的父widget.
源代码如下:
第8,第9行创建一个QWidget作为程序的主窗口,setWindowTitle()函数用来设置标题栏的显示。
第10和第11行各创建一个QSpinBox和QSlider。我们可以把window作为参数传给构造函数,来指示QtQSpinBox和QSlider是window的子窗口。但是这里不必要,因为我们下面要用到Qt的layout类,layout类会自动设置它们的父子关系。
第12和13行设置QSpinBox和QSlider值的范围。
第14到17行,用来绑定spinbox和slider,确保它们显示的值相同。不管哪个widget的值改变了,都会发射一个valueChanged(int)的信号,然后另一个widget的槽函数setValue(int)就自动执行。
第18行设置spinbox的值,此时QSpinBox对象发射valueChanged(int)信号,值为35.这个值被传给QSlider对象的槽函数setValue(int),把QSlider的值也设置为35.此时因为slider的值也改变了,slider也发射valueChanged信号,参数为35,又触发的QSpinBox对象的槽函数setValue(int).但是这时spinbox不再发射信号,因为它的值已经是35,这样避免了无限循环的可能。
第19至22行,我们用Qt的布局管理器(layoutmanager)来为spinbox和sliderwidgets布局。布局管理器是用来widgets的尺寸大小和位置的一个对象。Qt有三个主要的布局管理器类:
QHBoxLayout:用来水平的从左至右对widgets进行布局;
QVBoxLayout:用来垂直的从上到下对widgets进行布局;
QGridLayout:用来对widgets进行网格布局;
第22行,QWidget::setLayout()用来把一个布局管理器安装到一个窗口上,此函数会为这些widgets建立父子关系。
尽管我们没有明确的指定任何widgets的大小,QSpinBox和QSlider照样显示的很美观。这是因为QHBoxLayout自动为这些widgets设置了大小和位置。编程人员只需要把widgets放到布局管理器中,Qt会自动帮我们排布。
在第一章的最后我们列一个基本的Qt继承树
||
QObject--------->QCoreApplication--------->QApplication
|
|------->QWidget------------------------------->QAbstractButton------>QPushButton
||
||------------->QAbstractSpinBox------>QSpinBox
||------------->QAbstractSlider------->QSlider
||------------->QFrame---------------->QLabel
|---------QLayout----------->QBoxlayout-------->QHBoxLayout
1#include<QApplication>
2#include<QLabel>
3intmain(intargc,char*argv[])
4{
5QApplicationapp(argc,argv);
6QLabel*label=newQLabel("HelloQt!");
7label->show();
8returnapp.exec();
9}
第一行和第二行包含类QApplication和QLabel的定义.对于每个Qt类,都有一个跟类名同名的头文件,里面包含了类的定义。
第5行创建一个QApplication对象,用来管理整个进程范围内的资源。QApplication类支持命令行参数作为其构造函数的参数。
第6行创建一个QLabelWidget(类似于Windows中的控件和容器的概念)来显示“HelloQt!”.Widget可以包含其他Widget.
第7行显示Label.Widgets刚创建好都是隐藏的,在显示之前我们可以对它们进行配置(customize).
第8行把程序的控制权交给Qt.至此,程序进入一个eventloop(事件循环)。这是一种待命(stand-by)状态,等待用户事件的发生,如鼠标点击或键盘按钮。用户操作产生事件(events),也叫messages,程序会对这些事件进行响应,在Qt平台中,这些都由Qt来做,编程人员可以不予考虑。例如,当用户点击一个widget时,会产生一个mousepress和一个mouserelease事件。
将以后代码保存为hello.cpp.
qmake–project产生hello.proproject文件
qmakehello.pro产生makefile.
make进行编译
将第6行改为QLabel*label=newQLabel(“<h2><i>Hello</i>”
“<fontcolor=red>Qt!</font></h2>”);
可以得到类似HTML格式显示。
第二个例子。
怎样响应用户的操作。程序由一个按钮组成,当用户按下按钮,程序退出。代码如下:
1#include<QApplication>
2#include<QPushButton>
3intmain(intargc,char*argv[])
4{
5QApplicationapp(argc,argv);
6QPushButton*button=newQPushButton("Quit");
7QObject::connect(button,SIGNAL(clicked()),
8&app,SLOT(quit()));
9button->show();
10returnapp.exec();
11}
Widget会发射信号(emitsignals)来指示用户的行为或一个状态已经改变。例如,QPushButton发射clicked()信号当用户按下这个按钮。一个信号可以被连接到一个槽函数(slot),这样当则个信号发射时这个槽函数就会自动执行。在我们的这个例子中,我们把按钮的clicked()信号与QApplication对象的quit()槽函数相连接。SIGNAL和SLOT是两个宏。
LayingoutWidgets.
对Widgets进行布局。在这部分,我们来学习怎么用Qt中的layout类来管理一个窗口中的多个widgets.
程序由三个widgets组成:QSpinBox,QSlider和QWidget.QWidget是程序的主窗口,QSpinBox和QSlider属于QWidget的children.QWidget是最上层的窗口,所以没有父窗口。QWidget的构造函数及其所有的子类都有一个QWidget的参数用来指定此QWidget的父widget.
源代码如下:
1#include<QApplication>
2#include<QHBoxLayout>
3#include<QSlider>
4#include<QSpinBox>
5intmain(intargc,char*argv[])
6{
7QApplicationapp(argc,argv);
8QWidget*window=newQWidget;
9window->setWindowTitle("EnterYourAge");
10QSpinBox*spinBox=newQSpinBox;
11QSlider*slider=newQSlider(Qt::Horizontal);
12spinBox->setRange(0,130);
13slider->setRange(0,130);
14QObject::connect(spinBox,SIGNAL(valueChanged(int)),
15slider,SLOT(setValue(int)));
16QObject::connect(slider,SIGNAL(valueChanged(int)),
17spinBox,SLOT(setValue(int)));
18spinBox->setValue(35);
19QHBoxLayout*layout=newQHBoxLayout;
20layout->addWidget(spinBox);
21layout->addWidget(slider);
22window->setLayout(layout);
23window->show();
24returnapp.exec();
25}
第8,第9行创建一个QWidget作为程序的主窗口,setWindowTitle()函数用来设置标题栏的显示。
第10和第11行各创建一个QSpinBox和QSlider。我们可以把window作为参数传给构造函数,来指示QtQSpinBox和QSlider是window的子窗口。但是这里不必要,因为我们下面要用到Qt的layout类,layout类会自动设置它们的父子关系。
第12和13行设置QSpinBox和QSlider值的范围。
第14到17行,用来绑定spinbox和slider,确保它们显示的值相同。不管哪个widget的值改变了,都会发射一个valueChanged(int)的信号,然后另一个widget的槽函数setValue(int)就自动执行。
第18行设置spinbox的值,此时QSpinBox对象发射valueChanged(int)信号,值为35.这个值被传给QSlider对象的槽函数setValue(int),把QSlider的值也设置为35.此时因为slider的值也改变了,slider也发射valueChanged信号,参数为35,又触发的QSpinBox对象的槽函数setValue(int).但是这时spinbox不再发射信号,因为它的值已经是35,这样避免了无限循环的可能。
第19至22行,我们用Qt的布局管理器(layoutmanager)来为spinbox和sliderwidgets布局。布局管理器是用来widgets的尺寸大小和位置的一个对象。Qt有三个主要的布局管理器类:
QHBoxLayout:用来水平的从左至右对widgets进行布局;
QVBoxLayout:用来垂直的从上到下对widgets进行布局;
QGridLayout:用来对widgets进行网格布局;
第22行,QWidget::setLayout()用来把一个布局管理器安装到一个窗口上,此函数会为这些widgets建立父子关系。
尽管我们没有明确的指定任何widgets的大小,QSpinBox和QSlider照样显示的很美观。这是因为QHBoxLayout自动为这些widgets设置了大小和位置。编程人员只需要把widgets放到布局管理器中,Qt会自动帮我们排布。
在第一章的最后我们列一个基本的Qt继承树
QObject |
QCoreApplication |
QWidget |
QLayout |
QApplication |
QAbstractButton |
QAbstractSpinBox |
QAbstractSlider |
QFrame |
QBoxLayout |
QHBoxLayout |
QPushButton |
QSpinBox |
QSlider |
QLabel |
QObject--------->QCoreApplication--------->QApplication
|
|------->QWidget------------------------------->QAbstractButton------>QPushButton
||
||------------->QAbstractSpinBox------>QSpinBox
||------------->QAbstractSlider------->QSlider
||------------->QFrame---------------->QLabel
|---------QLayout----------->QBoxlayout-------->QHBoxLayout
相关文章推荐
- Qt学习日志-第五章
- Qt学习笔记-release版本的日志中QMessageLogContext内容为空。
- QT creator 环境 qt学习笔记第一章
- QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面
- QT学习 第一章:基本对话框--利用Qt Designer设计一个对话框
- OS X下UNIX环境高级编程(第三版)学习日志-第一章ChapterI,输入和输出
- QT学习 第一章:基本对话框--各种信息框的使用
- Qt学习日志-第四章
- 吴文虎-图论学习日志——第一章
- QT学习 第一章:基本对话框--动态加载UI (修改上一次内容)
- qt 学习笔记第一章
- QT学习 第一章:基本对话框--使用进度条
- Qt 源码学习日志 - corelib->kernel->qmath
- java面向对象编程学习日志【1】第一章
- Jfinal学习日志第一章-快速上手(详细图解)
- QT学习 第一章:基本对话框-- HelloWorld
- QT学习 第一章:基本对话框--表格的使用
- Qt学习日志 - 第二章
- QT学习 第一章:基本对话框--使用标准输入框
- QT学习 第一章:基本对话框--使用标准输入框