Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1562045
  • 博文数量: 290
  • 博客积分: 3468
  • 博客等级: 中校
  • 技术积分: 3461
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-28 22:21
文章分类

全部博文(290)

文章存档

2016年(13)

2015年(3)

2014年(42)

2013年(67)

2012年(90)

2011年(75)

分类: C/C++

2014-03-12 18:00:32

    作为一个QT项目的负责人,你总是不得不经常面临这样的情况:

    你们的团队接到了一个任务,然后你把这个任务细分为具体的模块,然后你的组员们顺利的完成了你布置的任务。他们做好了模块,然后提交给你了。现在,轮到你把他们的模块合并成一个程序了……

这网网是很困难的,原因是:

     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进化,进化为StudentAStudentB制作的模块——也就是这个帖子的重点了:

首先我们要把StudentAStudentB工作的成果添加到工程中来:

      打开这个工程所在的文件夹,将StudentAStudentB的工程(连文件夹一起拷贝过来):


      然后在工程文件中添加需要的文件, 除了main.cpp不用添加以外(因为一个工程只能有一个main)其余看你的需要,如果你需要在主工程中也能编辑StudentAStudentB的模块可以把Ui也添加进来

(到时候CG工程在编译的过程中会重新生成ui_StudentA.h  ui_StudentB.h,这是后话,不表……),于是就变成了这样:

     我们可以看到,哪个文件,是谁写的在我们的工程中一目了然,并且也可编辑,由于文件存在于工程文件中,所以Gcc在编译的时候也会重新根据我们的更改来编译这些文件。

     好了,终于到了今天最有趣的地方了,准备好享受编程的乐趣了么?

让我们的类进化吧!!!

第一步,选中pageone这个Qwidget,鼠标右键,promote to

 

第二步,填入信息:

Base class就选择Qwidget

Promote to class要输入StudentAStudentB在他们的头文件(.h)文件中定义的类名(不要敲错了哦!):

      最后是头文件的位置:当然是Student_A文件夹下的stua_widget.h啊,因为那个文件就在那里呆着嘛(好像是废话……):

总之就是这样,先点Add按钮,一个可进化类就做好了,选中它点promote就行了:

      哈哈,就这么简单,看看你原来是Qwidgetpage变成什么了:

      并且你一编译,就会奇迹般的发现StudentA做的日历已经乖乖的躺在你QstackWidgetpage里啦:

      同理可以在QstackWidget中加入B同学的模块,并且你可以在主工程中直接对AB两位同学的模块进行修改。你做的改动会被Gcc编译器重新编译。(这主要是你可以在他们的类中写一些插巢,然后在你的类也就是cg_widget初始化的时候去绑定这些巢,这样就可以向AB这两个类发送消息完成类之间的通信了,哈哈……

      最后补充说点QstackWidget的页面切换吧:

使用这个代码可以在程序中去改变当前的页:

      你可以在主面板上做一个按钮,通过绑定信号和插巢来分页来切换分页。当然插巢中应该有的代码,自然是上句啦,嘿嘿,好了,今天就说道这吧,好好利用这个功能,把大家的努力整合在一起,以更高效的进行开发,这个项目负责人应该掌握的,自己好好体会吧……

阅读(1372) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~