电商网站平台有哪些功能模块,鲜花销售网站建设策划表,在家接做网站,郑州网络推广营销概述许多工程软件#xff0c;如Qt Creator#xff0c;VS#xff0c;matlab等#xff0c;都是使用dock布局窗口#xff0c;这样用户可以自定义界面#xff0c;自由组合窗口。Qt的嵌套布局由QDockWidget完成#xff0c;用Qt Creator拖界面得到的dock布置形式比较固定…概述许多工程软件如Qt CreatorVSmatlab等都是使用dock布局窗口这样用户可以自定义界面自由组合窗口。Qt的嵌套布局由QDockWidget完成用Qt Creator拖界面得到的dock布置形式比较固定不能得想要的任意组合形式要得到如下图所示的效果后续布局必须通过代码来完成。 ps:这是自己没事写的一个数据可视化软件下面说说如何实现完全自由的界面布局效果QDockWidget在QMainWindow的布局函数要在QMainWindow里对dock进行布局需要用到如下几个函数添加dock函数此函数用于给dock指定位置同时也可以更改dock的位置此函数命名为addDockWidget有点容易误导因为不仅仅有add的功能还有chang的功能void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget)void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget, Qt::Orientation orientation)1212分割dock窗口函数此函数的功能是把两个dock进行左右或上下并排布置做成一个类似QSplit的功能void QMainWindow::splitDockWidget(QDockWidget * first, QDockWidget * second, Qt::Orientation orientation)11tab化窗口函数此函数的功能是把多个dock变成一个tab形式的窗体void QMainWindow::tabifyDockWidget(QDockWidget * first, QDockWidget * second)11设置dock嵌套布局此函数是设置嵌套布局的关键void QMainWindow::setDockNestingEnabled(bool enabled)11以上几个函数就能完成比较复杂的嵌套布局了。设置嵌套布局下面通过例子来讲解如何设置复杂的嵌套布局先用Qt Creator拖放9个dock进视图里为了好区分给每个dock设置一个背景颜色 dock属性随便设置保证都任意区域可以停靠即可由于这里不需要MainWindow的中间窗口整个视图都由dock组成因此先把QMainWindow的中间窗口部件去除在MainWindow的构造函数加入如下语句即可把MainWindow的中间窗口去除这时整个MainWindow只有Dock组成QWidget* p takeCentralWidget();if(p)delete p;123123编译出来的效果如图所示 拖动dock可以发现只能在两边进行组合我想把dock放置到中间是无法实现的这是由于为了简化dock的吸附QMainWindow默认是把dock嵌套关闭的需要我们手动设置在MainWindow的构造函数里添加setDockNestingEnabled(true);11即可打开嵌套功能这时编译出来的窗口能实现如下嵌套 此时整个窗口的布局将变得非常灵活且复杂由于Qt Creator在ui编辑器中无法像编译出来的程序那样任意调整位置因此需要手动对窗口进行设置。下面将介绍如何用代码设置复杂的dock为了方便添加两个函数和一个成员变量headpublic://移除并隐藏所有dockvoid removeAllDock();//显示dock窗口void showDock(const QList index QList());private:QList m_docks;/// 记录所有dockWidget的指针12345671234567CPP:MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui-setupUi(this);//删除中央窗体QWidget* p takeCentralWidget();if(p)delete p;//允许嵌套docksetDockNestingEnabled(true);//记录所有的dock指针m_docks.append(ui-dockWidget_1);m_docks.append(ui-dockWidget_2);m_docks.append(ui-dockWidget_3);m_docks.append(ui-dockWidget_4);m_docks.append(ui-dockWidget_5);m_docks.append(ui-dockWidget_6);m_docks.append(ui-dockWidget_7);m_docks.append(ui-dockWidget_8);m_docks.append(ui-dockWidget_9);}MainWindow::~MainWindow(){delete ui;}////// \brief 移除并隐藏所有的dock///void MainWindow::removeAllDock(){for(int i0;i9;i){removeDockWidget(m_docks[i]);}}////// \brief 显示指定序号的dock/// \param index 指定序号如果不指定则会显示所有///void MainWindow::showDock(const QList index){if (index.isEmpty()){for(int i0;i9;i){m_docks[i]-show();}}else{foreach (int i, index) {m_docks[i]-show();}}}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575812345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758void removeAllDock();函数可以把所有的dock隐藏void showDock(const QList index QList())则可以显示指定的dock。下面先对需要用到的几个函数进行示范addDockWidgetaddDockWidget函数用于给MainWindow添加dock窗体指定添加的区域如果想改变dock的位置也可以使用此函数进行移动。void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget)void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget, Qt::Orientation orientation)1212如addDockWidget(Qt::LeftDockWidgetArea,ui-dockWidget_1);addDockWidget(Qt::RightDockWidgetArea,ui-dockWidget_2);addDockWidget(Qt::TopDockWidgetArea,ui-dockWidget_3);addDockWidget(Qt::BottomDockWidgetArea,ui-dockWidget_4);12341234把4个dock按照上下左右布置效果如下splitDockWidgetsplitDockWidgetvoid QMainWindow::splitDockWidget(QDockWidget * first, QDockWidget * second, Qt::Orientation orientation)11此函数可以把一个dock(QDockWidget * first)在其位置上进行嵌套嵌套可以指定水平嵌套或者垂直嵌套嵌套方向是从左到右从上到下也就是QDockWidget * first相对于QDockWidget * second永远在左边或者上边。如removeAllDock();addDockWidget(Qt::LeftDockWidgetArea,ui-dockWidget_1);splitDockWidget(ui-dockWidget_1,ui-dockWidget_2,Qt::Horizontal);splitDockWidget(ui-dockWidget_2,ui-dockWidget_3,Qt::Horizontal);splitDockWidget(ui-dockWidget_3,ui-dockWidget_4,Qt::Horizontal);splitDockWidget(ui-dockWidget_4,ui-dockWidget_5,Qt::Horizontal);showDock(QList() 01234);12345671234567得到如下效果 若是removeAllDock();addDockWidget(Qt::LeftDockWidgetArea,ui-dockWidget_1);splitDockWidget(ui-dockWidget_1,ui-dockWidget_2,Qt::Vertical);splitDockWidget(ui-dockWidget_2,ui-dockWidget_3,Qt::Vertical);splitDockWidget(ui-dockWidget_3,ui-dockWidget_4,Qt::Vertical);splitDockWidget(ui-dockWidget_4,ui-dockWidget_5,Qt::Vertical);showDock(QList() 01234);12345671234567那么效果变为 此函数是实现嵌套布局的关键首先指定基准然后开始进行分割即可得到比较复杂的布局。分割原则是先水平再竖直从左到右从上到下下面显示一个九宫格布局 实现代码removeAllDock();//原则先左右再上下addDockWidget(Qt::LeftDockWidgetArea,ui-dockWidget_1);splitDockWidget(ui-dockWidget_1,ui-dockWidget_2,Qt::Horizontal);splitDockWidget(ui-dockWidget_2,ui-dockWidget_3,Qt::Horizontal);splitDockWidget(ui-dockWidget_1,ui-dockWidget_4,Qt::Vertical);splitDockWidget(ui-dockWidget_2,ui-dockWidget_5,Qt::Vertical);splitDockWidget(ui-dockWidget_3,ui-dockWidget_6,Qt::Vertical);splitDockWidget(ui-dockWidget_4,ui-dockWidget_7,Qt::Vertical);splitDockWidget(ui-dockWidget_5,ui-dockWidget_8,Qt::Vertical);splitDockWidget(ui-dockWidget_6,ui-dockWidget_9,Qt::Vertical);showDock();123456789101112123456789101112 实现代码removeAllDock();//原则先左右再上下addDockWidget(Qt::LeftDockWidgetArea,ui-dockWidget_1);splitDockWidget(ui-dockWidget_1,ui-dockWidget_2,Qt::Horizontal);splitDockWidget(ui-dockWidget_2,ui-dockWidget_3,Qt::Horizontal);splitDockWidget(ui-dockWidget_1,ui-dockWidget_4,Qt::Vertical);splitDockWidget(ui-dockWidget_3,ui-dockWidget_6,Qt::Vertical);splitDockWidget(ui-dockWidget_4,ui-dockWidget_7,Qt::Vertical);splitDockWidget(ui-dockWidget_6,ui-dockWidget_9,Qt::Vertical);showDock(QList() 0123568);1234567891012345678910 实现代码removeAllDock();addDockWidget(Qt::TopDockWidgetArea,ui-dockWidget_1);addDockWidget(Qt::LeftDockWidgetArea,ui-dockWidget_2);splitDockWidget(ui-dockWidget_2,ui-dockWidget_3,Qt::Horizontal);splitDockWidget(ui-dockWidget_3,ui-dockWidget_4,Qt::Horizontal);splitDockWidget(ui-dockWidget_2,ui-dockWidget_5,Qt::Horizontal);splitDockWidget(ui-dockWidget_3,ui-dockWidget_6,Qt::Horizontal);splitDockWidget(ui-dockWidget_4,ui-dockWidget_7,Qt::Horizontal);showDock(QList() 0123456);123456789123456789反正就是用splitDockWidget和addDockWidget你想怎么布置就怎么布置。tabifyDockWidget此函数就是实现tab合并功能直接看看下面例子 实现原理removeAllDock();addDockWidget(Qt::LeftDockWidgetArea,ui-dockWidget_1);splitDockWidget(ui-dockWidget_1,ui-dockWidget_2,Qt::Horizontal);splitDockWidget(ui-dockWidget_2,ui-dockWidget_3,Qt::Horizontal);splitDockWidget(ui-dockWidget_1,ui-dockWidget_4,Qt::Vertical);splitDockWidget(ui-dockWidget_2,ui-dockWidget_5,Qt::Vertical);splitDockWidget(ui-dockWidget_3,ui-dockWidget_6,Qt::Vertical);tabifyDockWidget(ui-dockWidget_1,ui-dockWidget_7);tabifyDockWidget(ui-dockWidget_5,ui-dockWidget_8);tabifyDockWidget(ui-dockWidget_3,ui-dockWidget_9);showDock();12345678910111234567891011代码本例代码下载本例代码免积分-http://blog.csdn.net/czyt1988/article/details/51209619#commentsNUint使用详解及Visual Studio配置NUint使用详解及Visual Studio配置 阅读目录 什么是单元测试? 为什么使用单元测试? NUint使用详解: 示例 属性 断言 简单测试 VS配置: External Tools Vis ...Android 布局学习之——Layoutlpar;布局rpar;详解二(常见布局和布局参数)[Android布局学习系列] 1.Android 布局学习之——Layout(布局)详解一 2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数) 3.And ...【单元测试】NUint使用详解及Visual Studio配置阅读目录 什么是单元测试? 为什么使用单元测试? NUint使用详解: 示例 属性 断言 简单测试 VS配置: External Tools Visual Nunit 2010 NUnit Test ...Android五大布局详解——FrameLayout(帧布局)FrameLayout 这个布局相对前面两节介绍的布局就简单了很多,因此它的应用场景也就特别的少.这种布局没有方便的定位方式,所有的控件都会默认摆放在布局的左上角.新建UILayoutTestThre ...Android五大布局详解——LinearLayout(线性布局)Android五大布局 本篇开始介绍Android的五大布局的知识,一个丰富的界面显示总是要有众多的控件来组成的,那么怎样才能让这些控件能够按你的想法进行摆放,从而自定义你所想要的用户界面呢?这就牵涉 ...详解在Visual Studio中使用git版本系统lbrack;转rsqb;这篇教程的预期,是希望没有任何版本使用基础的新手也可以掌握,所以细节较多,不当之处,欢迎指正. 一 .安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了 ...详解在visual studio中使用git版本系统lpar;图文rpar;很多人已经在使用git(或正在转移到git上),在github.com上,也看到园子里不少同学的开源项目,非常不错.但相关教程似乎不多,所以趁着我自己的开源项目源码托管(https://github. ...详解在Visual Studio中使用git版本系统转自:http://www.uml.org.cn/pzgl/201206211.asp【转】详解在visual studio中使用git版本系统lpar;图文rpar;http://blog.csdn.net/wojilu/article/details/6976230 很多人已经在使用git(或正在转移到git上),在github.com上,也看到不少国内同学的开 ...随机推荐安卓SQLite常见错误利用闲时写了一个简单的Sql语句操作SQLite数据库,在用SimpleCursorAdapter时出了一个异常好久都没解决 Process: com.example.chunchuner.usesq ...Flatten Binary Tree to Linked ListFlatten a binary tree to a fake linked list in pre-order traversal. Here we use the righ ...MSP430F149学习之路——LED#include void int_clk(); void delay(int i); void main() { WDTCTL WDTPW WDTH ...JS 获取Button控件的提交类型windows下查找指定端口被哪个程序占用在Windows环境下,用netstat命令查看某个端口号是否占用,为哪个进程所占用. eg.查看端口号为61078被哪个程序占用 1.查看端口号为61079被哪个PID所占用:Netstat –an ...javascript实现小鸟飞行轨迹javascript实现小鸟飞行轨迹 代码如下:WPF在在设计模式使用动态样式1.问题分析 WPF有时候要用到主题样式,比如颜色主题(红色.黄色之类的)通常是key相同,而value不同,比如会这么写: Background{DynamicResource Bac ...LeetCode算法题-Non-decreasing Array(Java实现)这是悦乐书的第283次更新,第300篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第151题(顺位题号是665).给定一个包含n个整数的数组,您的任务是通过修改最多1个元 ...Ubuntu网络不通解决办法如下问题: 尝试和Host主机互ping也不通, Ubuntu: vmware 桥接模式 IP:192.168.1.202/24 gateway:192.168.1.1 Host主机:网络正常 IP: ...通过Cnum;调用实现js加密代码的反混淆并运行js函数前一篇我测试了vba调用htmlfile做反混淆,并执行js加密函数的代码.本文换成C#实现. 联系QQ:564955427 C#操作JS函数,可以通过ScriptControl组件,但这个组件只能在 ...