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

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

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

横向:

      

纵向:

      

明显我们改变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. jfrog artifactory jenkins pipeline 集成

    1. 预备环境 artifactory ( 开源版本 ) maven jenkins jenkins artifactory plugin (在插件管理安装即可) 2. 配置artifactory  ...

  2. mysql中修改密码的方式

    参考地址:https://www.cnblogs.com/yang82/p/7794712.html mysql中修改用户密码的方式: 最简单的方法就是借助第三方工具Navicat for MySQL ...

  3. saas服务提供商

    这段时间接触了不少行业的东西,这里谈几点肤浅的看法.从市场行情上讲,SaaS风口还在,不过热度明显向大数据.物联网.人工智能.区块链等转移. 做得比较好的有这些SaaS提供商,每个领域的都有那么几家的 ...

  4. Scanner 的练习 。。。。依然不懂用法。。。苦恼

    package com.b; import java.util.Random; import java.util.Scanner; public class Core { public static ...

  5. JAVA基础知识——IO

    首先看一下JAVA IO的类继承关系

  6. 整合多个py文件接口的unittest。suite执行方法

    1.每个接口用例为一个.py文件.内容如下: getAdMakeMoneyList文件: # coding=utf-8import xlrdimport requestsimport unittest ...

  7. Linux性能监测:CPU篇

    CPU 也是一种硬件资源,和任何其他硬件设备一样也需要驱动和管理程序才能使用,我们可以把内核的进程调度看作是 CPU 的管理程序,用来管理和分配 CPU 资源,合理安排进程抢占 CPU,并决定哪个进程 ...

  8. springboot成神之——springboot入门使用

    springboot创建webservice访问mysql(使用maven) 安装 起步 spring常用命令 spring常见注释 springboot入门级使用 配置你的pom.xml文件 配置文 ...

  9. windows下配置非安装版的MySQL5.6

    Installing MySQL on Microsoft Windows Using a noinstall Zip Archive,在Windows上使用非安装压缩包安装MySQL.安装步骤如下: ...

  10. JQUEY 引用

    $(document).ready(function(){ alert($("a:first").attr("id")); });