Qt布局管理器的类有4种,它们分别为QHBoxLayout、QVBoxLayout、QGridLayout和QStackLayout。其中,QHBoxLayout实现水平布局,QVBoxLayout实现竖直布局,QGridLayout实现表格布局,QStackLayout实现分组布局。通过对这几种布局的嵌套组合,就可以实现复杂的对话框设计。

先看一个实现组件竖直布局的例子。

 #include <QApplication>
#include<QLabel>
#include<QPushButton>
#include<QHBoxLayout>
#include<QSlider>
#include<QSpinBox> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel*w=new QLabel("<h2><i>Hello</i><font color=red> World!</font></h2>");
//QLabel*w=new QLabel("Hello World!");
QWidget *window=new QWidget;
window->setWindowTitle("Enter Your Age"); QPushButton *button=new QPushButton("Quit");
QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit()) ); QSpinBox *spinbox = new QSpinBox;
QSlider *slider = new QSlider(Qt :: Horizontal);//(Qt::Vertical); 滑动条的摆放方式选择,水平还是竖直
spinbox->setRange( , );
slider->setRange( , ); QObject::connect(spinbox , SIGNAL(valueChanged(int)) , slider , SLOT( setValue(int)));
QObject::connect(slider , SIGNAL(valueChanged(int)) , spinbox , SLOT( setValue(int))); spinbox->setValue(); //QHBoxLayout为水平方摆放接下来的控件,QVBoxLayout为竖直摆放接下来的控件
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(w);
layout->addWidget(spinbox);//addWidget()虽定义自类QHBoxLayout,但属于QHBoxLayout继承于类QLayout的函数
layout->addWidget(slider);
layout->addWidget(button); window->setLayout(layout);
window->show(); return a.exec();
}

该程序比较简单,主要实现了hello world的显示、Spinbox和Slider之间的相互赋值(Qt的信号槽机制)、竖直布局以及PushButton的简单使用,运行程序,显示如下:

现实中应用到的对话框不仅仅是单一的布局,而是牵涉到水平布局和竖直布局的综合使用,下面通过一段程序来理解如何实现水平布局和竖直布局的嵌套使用。

 #include <QApplication>
#include<QLabel>
#include<QPushButton>
#include<QHBoxLayout>
#include<QSlider>
#include<QSpinBox> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel*w=new QLabel("<h2><i>Hello</i><font color=red> World!</font></h2>");
//QLabel*w=new QLabel("Hello World!");
QWidget *window=new QWidget;
window->setWindowTitle("Enter Your Age"); QPushButton *button=new QPushButton("Quit");
QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit()) ); QSpinBox *spinbox = new QSpinBox;
QSlider *slider = new QSlider(Qt :: Horizontal);//(Qt::Vertical); 滑动条的摆放方式选择,水平还是竖直
spinbox->setRange( , );
slider->setRange( , ); QObject::connect(spinbox , SIGNAL(valueChanged(int)) , slider , SLOT( setValue(int)));
QObject::connect(slider , SIGNAL(valueChanged(int)) , spinbox , SLOT( setValue(int))); spinbox->setValue(); QHBoxLayout *belowleftlayout = new QHBoxLayout;
belowleftlayout->addWidget(spinbox);
belowleftlayout->addWidget(slider); QVBoxLayout *leftlayout = new QVBoxLayout;
leftlayout->addWidget(w);
leftlayout->addLayout(belowleftlayout); //注意这里用的是addLayout()函数 QVBoxLayout *rightlayout = new QVBoxLayout;
rightlayout->addStretch();// 伸展器,用来占据它所在布局过程中的空间
rightlayout->addWidget(button); QHBoxLayout *layout = new QHBoxLayout;
layout->addLayout(leftlayout);
layout->addLayout(rightlayout); window->setLayout(layout);
window->show(); return a.exec();
}

运行程序结果显示:

通过上图,我们实现了组件按照我们不同的要求进行的相应布局。由于在对右侧进行竖直布局时,添加伸展器Stretch,因此Quit按键位于右下角。

当注释掉rightlayout->addStretch();语句后,可以清楚的看到伸展器Stretch所起的作用。运行程序结果显示如下:

最新文章

  1. Bootstrap之导航条
  2. ASP.NET4.5Web API及非同步程序开发系列(3)
  3. 基于ssh框架的在线考试系统开发的质量属性
  4. Python里的编码问题
  5. 解决SQL死循环问题
  6. FBX Transformation
  7. UVA 11461 - Square Numbers(水题)
  8. TCP/IP协议学习(三) STM32中ETH驱动配置注意事项
  9. 使用lock和condition实现的阻塞队列-字符串
  10. 在MongoDB中使用JOIN操作
  11. Linux下svn提交文件后自动同步更新到网站目录
  12. 加载驱动模块时Device or resource busy的解决方法
  13. 命令行创建Android应用,生成签名,对APK包签名并编译运行
  14. __cdecl、__stdcall、__fastcall、thiscall 进栈、出栈区别
  15. scp 在不同机器上传文件
  16. 教你一步一步部署.net免费空间OpenShift系列之四------绑定域名、使用CDN加速
  17. SSO(单点登录)与旅游年卡
  18. Maven的主要特点
  19. Gem/Bundle/Rvm
  20. SQL Server 远程更新目标表数据

热门文章

  1. python学习之老男孩python全栈第九期_day015知识点总结
  2. front-end 前端发展学习路线参考图
  3. [NodeJs] 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库
  4. JS判断客户端是否是iOS或者Android端
  5. 网络I/O模型--04非阻塞模式(解除accept()、 read()方法阻塞)的基础上加入多线程技术
  6. 读写JSON作配置文件
  7. JVM知识(二):类加载器原理
  8. spring boot(16)-mail发邮件
  9. Paxos可容错的一致性协议
  10. 将虚拟网络连接到 ExpressRoute 线路