QT项目负责人必须掌握的Ui设计师功能——Promote to !
2014-06-11 21:50
323 查看
作为一个QT项目的负责人,你总是不得不经常面临这样的情况:
你们的团队接到了一个任务,然后你把这个任务细分为具体的模块,然后你的组员们顺利的完成了你布置的任务。他们做好了模块,然后提交给你了。现在,轮到你把他们的模块合并成一个程序了……
这网网是很困难的,原因是:
1, 每个人所做的模块都有自己的界面,你在总的程序中要设计和定义好什么时候,在什么位置,谁的模块会生效?
2, 不同人的模块会有不同的功能和操作,你如何布置与此操作对应的按钮,这些按钮和时出现,何时被激活?
3, 怎么让他们的模块和主程序完美的融合,某个按钮的隐藏不会造成整个布局混乱?
4, 工程文件是混乱的么?是不是分不清哪里是谁做的?
所有的答案,就在QT设计师里,使用QT设计师的Promte to功能配合QT的强大信号和插巢功能,让你的类轻松自由的进化成你想要的样子,当然也可以进化成你的组员提交给你的模块……
我们以一个具体的工程来讲解:
A同学负责***一个显示模块,这个模块是一个日历(随便定的,只是为了演示方便)
B同学负责***一个统计模块,这个模块有一个计数器和一个数字输入框(QspinBox)
你来把这两个部分和在一起,不能影响布局的基础上尽量使界面美观。
首先是A同学的模块,我们很快就可以做好:
![](http://b53.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd00c165b09ed2928659ae0f4ce76ff0a8a96df976cb01b66762b4190962fad456c3084b7afb9685e6d879e8406a3581173c5e5ab63598482ef4bb92d123fe638b7e968838f3&a=53&b=53)
我们可以看到生成的工程是以Student_A的名字命名的,对应的类名,头文件(.h),源文件(.cpp)以及窗体(.ui)文件均是以stua_widget来命名。表示这个类是继承字Qwidget,由studentA负责开发。
![](http://b56.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd00edc9638d0eb54ca44dd4a90efaee3be5f398594e6738f16c2d451695b72a3dfe83eb38f223a70137b230194b9135a61c0a75ac939fe3023e16a0f7170969ca0639c87afa&a=54&b=56)
然后就是托控件了,也很简单……
我们可以加一个布局(Qlayout),以适应拉伸或者压缩。
![](http://b56.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd00c8056afa2ddc1a7534e0380f1ff6cae6a6ea550597815b7ac4da7a41ec1b5b7f0b8867480f69c8383a676f10a745d186f564bd58dd89e96dc5b760c44e5f3653768239f1&a=53&b=56)
![](http://b60.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd00d4b919e36282cb1a4563d4464e3e420b803e114adb1e50b72d312a2f50e4e835517f5f4b917edcaf283f1affe2850cf3c110288214f9dba27cf65bf841e9a4bebebe03ef&a=59&b=60)
然后就成功了,编译,把它提交给你的组长吧。
同理可以***StudentB的模块:
跟刚才一样,这里不再赘述……
做好了,是这个样子的:
![](http://b55.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd004e9fd5f69bc6951b87f343b855cd345c21c8df33be1b1b881a8f1f7b1f2c3b3b2597a4d3448bf39ad432133235bbaf288d9169f2cbb1f6829688396a64bc4a33b20f26c6&a=59&b=55)
然后是主工程,由负责人CG创建:
首先建好工程:
![](http://b53.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd00e582265f90d22c27b16f9304d5c842dab8a71f3cc5bf8d6cb0b7ddf7a3c78124597a8412049b39f310dbe1a76bc6271d84caac15efa1e1d470a14789edf511046622539f&a=56&b=53)
然后是界面,可以使用一个QstackWidget以避免不同的模块与对应按钮之间互不干扰,一会还会在说……,是这个样子:
![](http://b53.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd00d81d6bf1abfc1430dfe9da930d3996fb0e1334dbec9de31bfea32de481df20ee1ed8689b2f430c43ed06d36cbf8d4d082cfdc2ff65e21f84cd1b7e4ae0c72cbd7e8d430a&a=55&b=53)
有人也许会问:啊?你放东西了么?为什么我什么也看不到?呵呵,如果你观察的够自己的话,就会发现右上角有一个向左右的箭头:
![](http://b59.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd0092d95298cb6f8f3d117269e3457ba69570eb1e7711aaca5a04bbcd27eabe43dffaf88e21548a74800eae0e53185d52647554f488e012c251fb0871c5eb250e78216c11cb&a=54&b=59)
其实我不仅放了一个QstackWidget,我还为这个Widget做了一个布局。不信你看:
![](http://b60.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd005e1fe7f4abfa401b1504c2d7154a88bd45b7904c576c0fe7be11a5a55dcc5bf6d41a5fd37572197b657d4d5fec69e0394657eabdbe74fef319873cfa23569a392db207cf&a=60&b=60)
这个StackWidget有两页,每个页都有自己的Qwidget,这个是非常科学的。因为所有的QT GUI类,包括窗体部件和QmainWindow都是直接或者间接的继承自Qwidget!而我们今天要做的就是让这两个Qwidget进化,进化为StudentA和StudentB***的模块——也就是这个帖子的重点了:
首先我们要把StudentA和StudentB工作的成果添加到工程中来:
打开这个工程所在的文件夹,将StudentA和StudentB的工程(连文件夹一起拷贝过来):
![](http://b48.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd001544034efc3742231e8b9099494fa0b85bd1108c1c867e508ed28659e5ea286880c3058d227165bc850eb22e3ff8c8941bc5cf0e27bdb1b36f212fd01b7c300d89d8ede0&a=59&b=48)
然后在工程文件中添加需要的文件, 除了main.cpp不用添加以外(因为一个工程只能有一个main)其余看你的需要,如果你需要在主工程中也能编辑StudentA和StudentB的模块可以把Ui也添加进来
![](http://b60.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd00a4c569a9835e1ea4bc915006b701084472a8cec37e69ee01e85d9eae317faf5d3afd398f0d0c0f02724aff5c8eec29db41953bfb2e3890531522a3336c563eb0cf57522d&a=53&b=60)
(到时候CG工程在编译的过程中会重新生成ui_StudentA.h和 ui_StudentB.h,这是后话,不表……),于是就变成了这样:
![](http://b53.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd00f788cc928b4a9c54b0fe0ec955e2384e8820b6194b1cbeb3af7ad80cb5aab1e12b6cd72c538e0bbbde400b93fed3d6b36e13ece24df50dd26541ee0b32eadba21baba4da&a=55&b=53)
我们可以看到,哪个文件,是谁写的在我们的工程中一目了然,并且也可编辑,由于文件存在于工程文件中,所以Gcc在编译的时候也会重新根据我们的更改来编译这些文件。
好了,终于到了今天最有趣的地方了,准备好享受编程的乐趣了么?
让我们的类进化吧!!!
第一步,选中pageone这个Qwidget,鼠标右键,promote to:
![](http://b56.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd0076777406e9781eed435b669e4a9fe7a47f21bf687be647885ef8550d150dbce141f0ab294aa435d97f5eec70ad058065f325bb25883222de7af7b417b5c39553f8a9c72a&a=54&b=56)
第二步,填入信息:
Base class就选择Qwidget
Promote to class要输入StudentA和StudentB在他们的头文件(.h)文件中定义的类名(不要敲错了哦!):
![](http://b56.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd00734bdfab9f3dfa12f061bb22708281d279f9ee341ca6abe9d9fafd8e67a3b08d60123ca8c310cbc027b399e62cc4ade7901fb0b92827367e45f75c5a420f19d150ad3a26&a=54&b=56)
最后是头文件的位置:当然是Student_A文件夹下的stua_widget.h啊,因为那个文件就在那里呆着嘛(好像是废话……):
总之就是这样,先点Add按钮,一个可进化类就做好了,选中它点promote就行了:
![](http://b54.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd00e0517eee295c97677416bec917398b65fd09d8ac98eba7fec2b3ff2634e1b4e7afee6358ba42b3bf161947683483fead3fc8721615fed9d25d3142290b0c97c51ea3a829&a=60&b=54)
![](http://b55.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd00bb2372b94785e203bfe736227a2b0133b34d24127d1d7b8f108f02cb58eaec457338f6ea2822b0c1d9671522cb868514b1d06bcc1f19ce5dc2a4a774d997f34e85d14d12&a=56&b=55)
哈哈,就这么简单,看看你原来是Qwidget的page变成什么了:
![](http://b54.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd001afc7ee34d5d6073fd9962f3e1a3b62a9882722418f9c73f640339a2a3a46765e6d937967b0b28560bc2f86eb53030a266082052bf28224023f4d7e3f1d5f812d0f493d6&a=59&b=54)
并且你一编译,就会奇迹般的发现StudentA做的日历已经乖乖的躺在你QstackWidget的page里啦:
![](http://b53.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd006b05d92949f217402a9674a5f0c163c1a175c843ce5ff09cf18cd40f57c444316a46e2c674fabb53b6ab5f243559fa62846c2152a64b610eb367a8a89fc9919b3e752313&a=56&b=53)
同理可以在QstackWidget中加入B同学的模块,并且你可以在主工程中直接对A,B两位同学的模块进行修改。你做的改动会被Gcc编译器重新编译。(这主要是你可以在他们的类中写一些插巢,然后在你的类也就是cg_widget初始化的时候去绑定这些巢,这样就可以向A,B这两个类发送消息完成类之间的通信了,哈哈……
最后补充说点QstackWidget的页面切换吧:
使用这个代码可以在程序中去改变当前的页:
![](http://b59.photo.store.qq.com/http_imgload.cgi?/rurl4_b=843cc2021f15b121d47712955036dd00afa15f7e3baca78f758d4face5c1f8a89f518870df6613b296e8cd2f0d2080786f53e32b51d9b6b4ca852dfea1febc9994872d0cbb8c7225b0b27ddab3874429bc9bbffe&a=54&b=59)
你可以在主面板上做一个按钮,通过绑定信号和插巢来分页来切换分页。当然插巢中应该有的代码,自然是上句啦,嘿嘿,好了,今天就说道这吧,好好利用这个功能,把大家的努力整合在一起,以更高效的进行开发,这个项目负责人应该掌握的,自己好好体会吧……
阅读(149) | 评论(0) | 转发(0) |
0
上一篇:一支使用了DMA的网卡驱动分析
下一篇:qt做的简易 仪表
相关热门文章
test123
编写安全代码——小心有符号数...
使用openssl api进行加密解密...
一段自己打印自己的c程序...
sql relay的c++接口
系统提供的库函数存在内存泄漏...
初学UNIX环境高级编程的,关于...
chinaunix博客什么时候可以设...
一个访问量较大网站的服务器。...
收音机驱动与v4l2架构的关系,...
给主人留下些什么吧!~~
评论热议
你们的团队接到了一个任务,然后你把这个任务细分为具体的模块,然后你的组员们顺利的完成了你布置的任务。他们做好了模块,然后提交给你了。现在,轮到你把他们的模块合并成一个程序了……
这网网是很困难的,原因是:
1, 每个人所做的模块都有自己的界面,你在总的程序中要设计和定义好什么时候,在什么位置,谁的模块会生效?
2, 不同人的模块会有不同的功能和操作,你如何布置与此操作对应的按钮,这些按钮和时出现,何时被激活?
3, 怎么让他们的模块和主程序完美的融合,某个按钮的隐藏不会造成整个布局混乱?
4, 工程文件是混乱的么?是不是分不清哪里是谁做的?
所有的答案,就在QT设计师里,使用QT设计师的Promte to功能配合QT的强大信号和插巢功能,让你的类轻松自由的进化成你想要的样子,当然也可以进化成你的组员提交给你的模块……
我们以一个具体的工程来讲解:
A同学负责***一个显示模块,这个模块是一个日历(随便定的,只是为了演示方便)
B同学负责***一个统计模块,这个模块有一个计数器和一个数字输入框(QspinBox)
你来把这两个部分和在一起,不能影响布局的基础上尽量使界面美观。
首先是A同学的模块,我们很快就可以做好:
我们可以看到生成的工程是以Student_A的名字命名的,对应的类名,头文件(.h),源文件(.cpp)以及窗体(.ui)文件均是以stua_widget来命名。表示这个类是继承字Qwidget,由studentA负责开发。
然后就是托控件了,也很简单……
我们可以加一个布局(Qlayout),以适应拉伸或者压缩。
然后就成功了,编译,把它提交给你的组长吧。
同理可以***StudentB的模块:
跟刚才一样,这里不再赘述……
做好了,是这个样子的:
然后是主工程,由负责人CG创建:
首先建好工程:
然后是界面,可以使用一个QstackWidget以避免不同的模块与对应按钮之间互不干扰,一会还会在说……,是这个样子:
有人也许会问:啊?你放东西了么?为什么我什么也看不到?呵呵,如果你观察的够自己的话,就会发现右上角有一个向左右的箭头:
其实我不仅放了一个QstackWidget,我还为这个Widget做了一个布局。不信你看:
这个StackWidget有两页,每个页都有自己的Qwidget,这个是非常科学的。因为所有的QT GUI类,包括窗体部件和QmainWindow都是直接或者间接的继承自Qwidget!而我们今天要做的就是让这两个Qwidget进化,进化为StudentA和StudentB***的模块——也就是这个帖子的重点了:
首先我们要把StudentA和StudentB工作的成果添加到工程中来:
打开这个工程所在的文件夹,将StudentA和StudentB的工程(连文件夹一起拷贝过来):
然后在工程文件中添加需要的文件, 除了main.cpp不用添加以外(因为一个工程只能有一个main)其余看你的需要,如果你需要在主工程中也能编辑StudentA和StudentB的模块可以把Ui也添加进来
(到时候CG工程在编译的过程中会重新生成ui_StudentA.h和 ui_StudentB.h,这是后话,不表……),于是就变成了这样:
我们可以看到,哪个文件,是谁写的在我们的工程中一目了然,并且也可编辑,由于文件存在于工程文件中,所以Gcc在编译的时候也会重新根据我们的更改来编译这些文件。
好了,终于到了今天最有趣的地方了,准备好享受编程的乐趣了么?
让我们的类进化吧!!!
第一步,选中pageone这个Qwidget,鼠标右键,promote to:
第二步,填入信息:
Base class就选择Qwidget
Promote to class要输入StudentA和StudentB在他们的头文件(.h)文件中定义的类名(不要敲错了哦!):
最后是头文件的位置:当然是Student_A文件夹下的stua_widget.h啊,因为那个文件就在那里呆着嘛(好像是废话……):
总之就是这样,先点Add按钮,一个可进化类就做好了,选中它点promote就行了:
哈哈,就这么简单,看看你原来是Qwidget的page变成什么了:
并且你一编译,就会奇迹般的发现StudentA做的日历已经乖乖的躺在你QstackWidget的page里啦:
同理可以在QstackWidget中加入B同学的模块,并且你可以在主工程中直接对A,B两位同学的模块进行修改。你做的改动会被Gcc编译器重新编译。(这主要是你可以在他们的类中写一些插巢,然后在你的类也就是cg_widget初始化的时候去绑定这些巢,这样就可以向A,B这两个类发送消息完成类之间的通信了,哈哈……
最后补充说点QstackWidget的页面切换吧:
使用这个代码可以在程序中去改变当前的页:
你可以在主面板上做一个按钮,通过绑定信号和插巢来分页来切换分页。当然插巢中应该有的代码,自然是上句啦,嘿嘿,好了,今天就说道这吧,好好利用这个功能,把大家的努力整合在一起,以更高效的进行开发,这个项目负责人应该掌握的,自己好好体会吧……
阅读(149) | 评论(0) | 转发(0) |
0
上一篇:一支使用了DMA的网卡驱动分析
下一篇:qt做的简易 仪表
相关热门文章
test123
编写安全代码——小心有符号数...
使用openssl api进行加密解密...
一段自己打印自己的c程序...
sql relay的c++接口
系统提供的库函数存在内存泄漏...
初学UNIX环境高级编程的,关于...
chinaunix博客什么时候可以设...
一个访问量较大网站的服务器。...
收音机驱动与v4l2架构的关系,...
给主人留下些什么吧!~~
评论热议
相关文章推荐
- QT项目负责人必须掌握的Ui设计师功能——Promote to !
- 我们必须拥有这个功能,否则就完蛋了——项目经理应该小心的游戏之十一
- Qt程序设计——实现以项目管理文件的功能:创建和打开项目
- java在线聊天项目 实现基本聊天功能后补充的其他功能详细需求分析 及所需要掌握的Java知识基础 SWT的激活方法,swt开发包下载,及破解激活码
- 新任项目经理必须掌握的五项修炼
- 项目管理工具必须具备的5个功能
- 【项目实战】--仅对 LINQ to Entities 中已排序的输入支持方法“Skip”。必须在调用“Skip”方法之前调用方法“OrderBy”
- Android开发人员必须掌握的10 个开发工具+应该深入学习的10个开源应用项目
- QT基础(三)----QPainter画图功能 & 画图小项目
- 标志设计必须掌握的AI软件的知识点【太原UI设计师】
- PullToRefresh的上拉加载下拉刷新功能实现(导包到项目中路径不要有中文)
- Qt TODO/FIXME 功能
- 如何在QT项目中集成Bison/Flex(Yacc/Lex)自动编译生成功能
- Android开源项目PullToRefresh下拉刷新功能详解
- 快速搭建好一个项目,你必须掌握这两步
- GammaRay is a tool to poke around in a Qt-application(确实很多功能)
- c/c++程序员必须要掌握开源项目
- Android开源项目PullToRefresh下拉刷新功能详解2
- 我们必须拥有这个功能,否则就完蛋了——项目经理应该小心的游戏之十一
- c/c++程序员必须要掌握开源项目