在应用程序中,一个界面的布局基本都是固定的。

在这个实例中,我们把管理布局的代码放在槽中。这样点击一次按钮,触发槽。布局改变一次。这样就成为一个动态布局。

(一) 水平和竖直布局改变

横向:

      

纵向:

      

明显我们改变combobox中的选项。整个布局的界面就会变化。明显信号就是combobox中的

currentIndexChanged(int index),我们设计槽处理这个信号。

if(index == ) {

        buttonLayout->addWidget(button1, , );
buttonLayout->addWidget(button2, , );
buttonLayout->addWidget(button3, , ); mainLayout->removeWidget(buttonGroupBox);
mainLayout->addWidget(buttonGroupBox, , ); setLayout(mainLayout); return ; } if(index == ) { buttonLayout->addWidget(button1, , );
buttonLayout->addWidget(button2, , );
buttonLayout->addWidget(button3, , ); mainLayout->removeWidget(buttonGroupBox);
mainLayout->addWidget(buttonGroupBox, , ); setLayout(mainLayout); return; }

需要重新布局的控件。先调用QLayout中的removeWidget方法。然后再添加进来。

不过此时要改变在QGridLayout中的行列,实现水平和竖直布局。

(二)旋转控件。

初始状态:

      

旋转:

      

思路和上一个例子一样。先做好初始的布局。

然后再槽中 removeWidget()删除所有的控件。重新布局。

void Dialog::create()
{
widgetGroupBox = new QGroupBox(tr("Rotate Widgets"));
rotateButton = new QPushButton(tr("Rotate Widget")); queue.enqueue(new QSpinBox());
queue.enqueue(new QProgressBar());
queue.enqueue(new QSlider());
queue.enqueue(new QDial()); int n = queue.count(); for(int i=; i<n; i++) {
connect(queue[i], SIGNAL(valueChanged(int)), queue[(i+)%n], SLOT(setValue(int)));
} boxLayout = new QGridLayout;
widgetGroupBox->setLayout(boxLayout); rotateWidget(); }
void Dialog::rotateWidget()
{
Q_ASSERT(queue.count() % == ); foreach (QWidget * w, queue) {
boxLayout->removeWidget(w);
} queue.enqueue(queue.dequeue()); int n = queue.count(); for(int i=; i<n/; i++) {
boxLayout->addWidget(queue[n--i], , i);
boxLayout->addWidget(queue[i], , i);
}
}

第一次的布局也是调用rotateWidget函数实现的。可见,当布局为空。里面没有控件时,调用removeWidget函数也不会使程序报错。

完整代码:https://github.com/Satius/qt5/tree/master/qtbase/examples/widgets/layouts/dynamiclayouts

    

3.Dynamic Layout 动态布局。在槽中处理布局的更多相关文章

  1. 什么是布局?Android中的布局是怎样的?

    布局管理器(通常被称为是布局)是对ViewGroup类的扩展,是用来控制子控件在UI中的位置. Android SDK包含了许多布局类,在为视图.Fragment和Activity创建UI时,可以使用 ...

  2. yii2中 选择布局的方式,可以设置不使用布局

    ###yii2中 选择布局的方式,可以设置不使用布局 控制器内成员变量 public $layout = false; //不使用布局 public $layout = "main" ...

  3. Android Studio分类整理res/Layout中的布局文件(创建子目录)

    res/layout中的布局文件太杂,没有层次感,受不了的我治好想办法解决这个问题. 前几天看博客说可以使用插件分组,可惜我没找到.知道看到另一篇博客时,才知道这个方法不能用了. 不能用插件,那就手动 ...

  4. Android中的布局优化方法

    http://blog.csdn.net/rwecho/article/details/8951009 Android开发中的布局很重要吗?那是当然.一切的显示样式都是由这个布局决定的,你说能不重要吗 ...

  5. 我的Android进阶之旅------>Android中的布局优化 include、merge 、ViewStub

    1.如何重用布局文件? 可以使用<include>标签引用其他的布局文件,并用android:id属性覆盖被引用布局文件中顶层节点的android:id属性值.代码如下: <!--引 ...

  6. Android中的布局动画

    简介 布局动画是给布局的动画,会影响到布局中子对象 使用方法 给布局添加动画效果: 先找到要设置的layout的id,然后创建布局动画,创建一个LayoutAnimationController,并把 ...

  7. android 非activity如何得到布局文件 (java文件中获取布局文件)

    Android中得到布局文件对象有两种方式第一种,在Activity所在类中this.getLayoutInflater().inflater(R.layout.布局文件名,null);第二种,在非A ...

  8. Java中用户界面布局

    绝对布局Absolute 通过放大或缩小界面的时候,组件大小和位置不会发生变化 浮动布局FlowLayout 调整应用程序窗口的大小时,组件将立刻重新排列 边界布局Border Layout 该位置有 ...

  9. 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)

    1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...

随机推荐

  1. spring源码学习之:springAOP实现底层原理

    一:springAOP底层实现是基于动态代理实现的.增强和切面,以及通知.是在动态代理生成的代理类inoke方法中调用实现 //+++++++++++++aop动态代理++++++++++++++++ ...

  2. 笔记:LIR2032 电池充电记录

    笔记:LIR2032 电池充电记录 LIR2032 电池是锂电池,形状和 CR2032 一样,只不过可以充电,材料是锂离子. 一个单颗的 LIR2032 电池容量只有 40mAH,容量很小. 那么就需 ...

  3. php MySQL使用rand函数随机取记录(转)

    php MySQL使用rand函数随机取记录 如何在mysql中使用随机数, 如何写一个语句能一下更新几百条MYSQL数据! 需要测试MYSQL数据库,里面有一个上万条数据的数据库,如何写一个PHP文 ...

  4. 如何在B2C电子商务网站后台添加CNZZ统计代码(转)

    CNZZ作为网站流量数据统计分析工具的一种,和百度统计工具类似,同样也是用于查看分析网站所有流量数据来源的一种站长工具,当然商家可根据自己的习惯在B2C电子商务网站后台添加相应的数据统计代码来管理您的 ...

  5. Tomcat服务器下 catalina.out 日志开关

    很多异常在 debug 日志里不会打印,但在 catalina.out 里会打印,比如方法调用找不到,jdk 版本不匹配等.但是打开了该日志开关又会产生一个问题,就是它会哗啦啦的不断急剧膨胀,文件太大 ...

  6. Java 数组的浅拷贝和深拷贝

    浅拷贝: 在堆内存中不会分配新的空间,而是增加一个引用变量和之前的引用指向相同的堆空间. int[] a = {1,2,3,4,5}; int[]b = a; public class Test { ...

  7. Oracle记录(四) 简单查询、限定查询、数据的排序

    一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.ANSI(美国国家标准学会) ...

  8. laravel前后端分离的用户登陆 退出 中间件的接口与session的使用

    在项目开发的过程中,需要有用户的登陆 退出 还有校验用户是否登陆的中间件; 基本思路: 登陆: 前端请求接口的参数校验 用户名 密码规则的校验 用户名密码是否正确的校验; 如果上面的校验都通过的了,把 ...

  9. php排序集合

    如果你已经使用了一段时间PHP的话,那么,你应该已经对它的数组比较熟悉了——这种数据结构允许你在单个变量中存储多个值,并且可以把它们作为一个集合进行操作. 经常,开发人员发现在PHP中使用这种数据结构 ...

  10. appium 中swipe()方法向左滑动时

    应该在UI Automator Viewer中读取到的例如ImageView [180,600][900,1320],如果要左滑,代码中应该是写为driver.swipe(900,1320,180,6 ...