Qt学习笔记_Chapter1_3窗口部件的布局
Windows7下的程序运行效果图:
这一节主要讲了两点:(1)如何用布局(Layout)来管理窗口中窗口部件的几何形状;(2)如何利用信号和槽来同步窗口部件。
这个应用程序用了三个窗口部件:一个QSpinBox(微调框)、一个QSlider(滑块)和一个QWidget。其中QWidget是这个应用程序的主窗口,也是QSpinBox和QSlider的父对象,QWidget自己没有父对象。QWidget的构造函数以及它的所有子类都会带一个参数QWidget*,以用来说明谁是它们的父窗口部件。
- #include <QApplication>
- #include <QHBoxLayout>
- #include <QSlider>
- #include <QSpinBox>
- int main(int argc,char *argv[])
- {
- QApplication app(argc,argv);
- QWidget *windows=new QWidget;
- windows->setWindowTitle("Enter Your Age");
- QSpinBox *spinBox=new QSpinBox;
- QSlider *slider=new QSlider(Qt::Horizontal);
- spinBox->setRange(0,130);
- slider->setRange(0,130);
- QObject::connect(spinBox,SIGNAL(valueChanged(int)),
- slider,SLOT(setValue(int)));
- QObject::connect(slider,SIGNAL(valueChanged(int)),
- spinBox,SLOT(setValue(int)));
- spinBox->setValue(35);
- QHBoxLayout *layout=new QHBoxLayout;
- layout->addWidget(spinBox);
- layout->addWidget(slider);
- windows->setLayout(layout);
- windows->show();
- return app.exec();
- }
Line8,9:创建了Widget对象,使用setWindowTitle()函数来设置显示在窗口标题栏上的文字。
Line10,11:创建了一个QSpinBox和一个QSlider,并分别在第12行和第13行设置了它们的有效范围。本应将这个窗口传递给QSpinBox和QSlider的构造函数,以说明这两个窗口部件的父对象都是这个窗口,但在这里没有这个必要,因为布局系统将会自行得出这一结果并自动把该窗口设置为微调框和滑块的父对象。
Line14-17:调用了两次QObject::connect(),来确保能够让微调框和滑块同步,一旦有一个窗口部件的值发生了改变那么就会发射它的valueChanged(int)信号,而另一个窗口部件就会用这个新值调用它的setValue(int)值。
Line18:将微调框的值设置为35,此时QSpinBox会发射valueChanged(int)信号,其中,int参数的值为35,触发QSlider的setValue(int)槽,避免无限循环的发生,流程如下图所示:
Line19-22:使用了一个布局管理器对微调框和滑块进行布局处理。布局管理器(layout manager)是一个能够对其所负责窗口部件的尺寸大小的位置进行设置的对象。Qt有三个主要的布局管理器类:(1)QHBoxLayout:在水平方向上排列窗口部件,从左到右;(2)QVBoxLayout:在竖起方向上排列窗口部件,由上到下;(3)QGridLayout,把各个窗口部件排列在一个网格中。第22行的QWidget::setLayout()函数调用会在窗口上安装该布局管理器。QSpinBox和QSlider会自动“重定义父对象”,成为这个安装了布局的窗口部件的子对象。因此当创建一个需要放进某个布局中的窗口部件时,就没有必要为其显式的指定父对象了。
近期评论