3.Dynamic Layout 动态布局。在槽中处理布局
在应用程序中,一个界面的布局基本都是固定的。
在这个实例中,我们把管理布局的代码放在槽中。这样点击一次按钮,触发槽。布局改变一次。这样就成为一个动态布局。
(一) 水平和竖直布局改变
横向:
纵向:
明显我们改变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 动态布局。在槽中处理布局的更多相关文章
- 什么是布局?Android中的布局是怎样的?
布局管理器(通常被称为是布局)是对ViewGroup类的扩展,是用来控制子控件在UI中的位置. Android SDK包含了许多布局类,在为视图.Fragment和Activity创建UI时,可以使用 ...
- yii2中 选择布局的方式,可以设置不使用布局
###yii2中 选择布局的方式,可以设置不使用布局 控制器内成员变量 public $layout = false; //不使用布局 public $layout = "main" ...
- Android Studio分类整理res/Layout中的布局文件(创建子目录)
res/layout中的布局文件太杂,没有层次感,受不了的我治好想办法解决这个问题. 前几天看博客说可以使用插件分组,可惜我没找到.知道看到另一篇博客时,才知道这个方法不能用了. 不能用插件,那就手动 ...
- Android中的布局优化方法
http://blog.csdn.net/rwecho/article/details/8951009 Android开发中的布局很重要吗?那是当然.一切的显示样式都是由这个布局决定的,你说能不重要吗 ...
- 我的Android进阶之旅------>Android中的布局优化 include、merge 、ViewStub
1.如何重用布局文件? 可以使用<include>标签引用其他的布局文件,并用android:id属性覆盖被引用布局文件中顶层节点的android:id属性值.代码如下: <!--引 ...
- Android中的布局动画
简介 布局动画是给布局的动画,会影响到布局中子对象 使用方法 给布局添加动画效果: 先找到要设置的layout的id,然后创建布局动画,创建一个LayoutAnimationController,并把 ...
- android 非activity如何得到布局文件 (java文件中获取布局文件)
Android中得到布局文件对象有两种方式第一种,在Activity所在类中this.getLayoutInflater().inflater(R.layout.布局文件名,null);第二种,在非A ...
- Java中用户界面布局
绝对布局Absolute 通过放大或缩小界面的时候,组件大小和位置不会发生变化 浮动布局FlowLayout 调整应用程序窗口的大小时,组件将立刻重新排列 边界布局Border Layout 该位置有 ...
- 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)
1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...
随机推荐
- JDBC 1 利用Statement对数据库进行增删改查
准备工作 1新建po类:User private int id; private String name; private String pwd; set,get方法省略 2 新建UserDao类, ...
- 圆方树总结 [uoj30]Tourists
圆方树总结 所谓圆方树就是把一张图变成一棵树. 怎么变啊qaq 这里盗一张图 简单来说就是给每一个点双新建一个点,然后连向这个点双中的每一个点.特殊的,把两个点互相连通的也视作一个点双. 我们把原来就 ...
- 洛谷P2661 信息传递
传送门 题目大意:每个人每一轮可以把消息传给另一个人,问几轮后某个人可以从人 听到自己的消息. 题解:tarjian缩点,求缩点后缩的点包含的最少的点个数. 代码: 正解 #include<io ...
- OpenSSH 使用技巧
1. 取消 OpenSSH 初次连接 yes 确认 在脚本中有时会使用ssh进行远程连接操作,如果是第一次 ssh 连接往往会提示你是否确认连接并要求你输入yes, 才能继续.如何才能避免这个步骤呢? ...
- AES前后加密算法代码
首先下载aes.js加密工具类: 本文采用的是 AES/ECB/PKCS5Padding的加密方式进行加密的: js加密写法如下: <!DOCTYPE html> <html lan ...
- FastAdmin + uni-app
FastAdmin + uni-app FastAdmin https://www.FastAdmin.net uni-app http://uniapp.dcloud.io/ 自己先挖个坑.
- windows下安装storm1.1.0并启动
64位windows安装storm前需要先搞定zookeeper和python,所以下面我们3步走: 一.zookeeper 1.上https://zookeeper.apache.org/点击下方d ...
- sql中case when的简单使用
这是一个很多博客都引用的博客,作者未知,但是我第一次看到的就是这个,所以置顶这个吧, 这里有两个我刚才使用的列子: --查询同一机构的签约数和解约数: select t.sgn_acct_issr_i ...
- 2017中国大学生程序设计竞赛 - 女生专场 Happy Necklace(递推+矩阵快速幂)
Happy Necklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- CCPC2018-湖南全国邀请赛 G String Transformation
G.String Transformation 题目描述 Bobo has a string S = s1 s2...sn consists of letter a , b and c . He ca ...