【OK210试用体验】+inux嵌入式下QT图形界面开发(一) - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】+inux嵌入式下QT图形界面开发(一)

李雷 ( 楼主 ) 2015-9-14 01:19:41  只看该作者 倒序浏览

1 QT 的支撑工具
        Qt 包含了许多支持嵌入式系统开发的工具。有两个最实用的工具是 qmake 和Qt designer(图形设计器)。qmake 是一个为编译Qt/Embedded 库和应用而提供的Makefile 生成器。它能够根据一个工程文件(.pro)产生不同平台下的Makefile 文件。qmake 支持跨平台开发和影子生成(shadow builds),影子生成是指当工程的源代码共享给网络上的多台机器时,每台机器编译链接这个工程的代码将在不同的子路径下完成,这样就不会覆盖别人的编译链接生成的文件。qmake 还易于在不同的配置之间切换。开发者可以使用Qt 图形设计器可视化地设计对话框而不需编写一行代码。使用Qt图形设计器的布局管理可以生成具有平滑改变尺寸的对话框,qmake 和Qt 图形设计器完全集成在一起。

2 信号与插槽
        信号与插槽机制提供了对象间的通信机制,它易于理解和使用,并完全被Qt 图形设计器所支持。图形用户接口的应用需要对用户的动作做出响应。例如,当用户点击了一个菜单项或是工具栏的按钮时,应用程序会执行某些代码。大部分情况下,我们希望不同类型的对象之间能够进行通信。程序员必须把事件和相关代码联系起来,这样才能对事件做出响应。以前的工具开发包使用的事件响应机制是易崩溃的,不够健壮的,同时也不是面向对象的。Trolltech 已经创立了一种新的机制,叫做“信号与插槽”。信号与插槽是一种强有力的对象间通信机制,它完全可以取代原始的回调和消息映射机制;信号与插槽是迅速的,类型安全的,健壮的,完全面向对象并用C++来实现的一种机制。
        以前,我们使用回调函数机制来把某段响应代码和一个按钮的动作相关联时,我们通常把那段响应代码写成一个函数,然后把这个函数的地址指针传给按钮,当那个按钮被按下时,这个函数就会被执行。对于这种方式,以前的开发包不能够确保回调函数被执行时所传递进来的函数参数就是正确的类型,因此容易造成进程崩溃,另外一个问题是,回调这种方式紧紧的绑定了图形用户接口的功能元素,因而很难把开发进行独立的分类。Qt的信号与插槽机制是不同的。Qt的窗口在事件发生后会激发信号。例如一个按钮被点击时会激发一个“clicked”信号。程序员通过建立一个函数(称作一个插槽),对象1图一一些信号与插槽连接的抽象图然后调用connect()函数把这个插槽和一个信号连接起来,这样就完成了一个事件和响应代码的连接。信号与插槽机制并不要求类之间互相知道细节,这样就可以相对容易的开发出代码可高重用的类。信号与插槽机制是类型安全的,它以警告的方式报告类型错误,而不会使系统产生崩溃。例如,如果一个退出按钮的clicked() 信号被连接到了一个应用的退出函数
        信号1
        信号2
        插槽1
        插槽2
        插槽1
        插槽2
        插槽3
        插槽1
        信号1
        信号1
        对象3
        对象4
        connect( 对象1, 信号1, 对象2, 插槽1 )
        connect( 对象1, 信号1, 对象2, 插槽2 )
        connect( 对象1, 信号2, 对象4, 插槽1 )
        connect( 对象3, 信号1, 对象4, 插槽3 )
        对象2
        quit() 插槽。一个用户点击退出键将使应用程序终止运行。上述的连接过程用代码写出来就是这样connect( button, SIGNAL(clicked()), qApp, SLOT(quit()) );我们可以在Qt应用程序的执行过程中增加或是减少信号与插槽的连接。信号与插槽的实现扩展了C++的语法,也完全利用了C++面向对象的特征。信号与插槽可以被重载或者重新实现,它们可以定义为类的公有,私有或是保护成员。

3 窗体
        Qt 拥有丰富的满足不同需求的窗体(按钮,滚动条等等),Qt 的窗体使用起来很灵活,为了满足特别的要求,它很容易就可以被子类化。窗体是Qwidget类或它子类的实例,客户自己的窗体类需要从Qwidget它的子类继承。
图二 摘录的Qwidget 类的继承图
        一个窗体可以包含任意数量的子窗体,子窗体可以显示在父窗体的客户区,一个没父窗体的窗体我们称之为顶级窗体(一个“窗口”),一个窗体通常有一个边框和标题栏作为装饰。Qt 并未对一个窗体有什么限制,任何类型的窗体可以是顶级窗体,任何类型的窗体可以是别的窗体的子窗体。在父窗体显示区域的子窗体的位置可以通过布局管理自动的进行设置,也可以人为的指定。当父窗体无效,隐藏或被删除后,它的子窗体都会进行同样的动作。标签,消息框,工具栏等等等,并未被限制使用什么颜色,字体和语言。

4 画布
        QCanvas 类提供了一个高级的平面图形编程接口,它可以处理大量的像线条、矩形、椭圆、文本、位图、动画等这些画布项,画布项可以较容易的做成交互式的(例如做成支持用户移动的)。画布项是QcanvasItem子类的实例,它们比窗体类Qwidget更显得轻量级,它们能够被快速的移动,隐藏和显示。Qcanvas可以更有效的支持冲突检测,它能够列出一个指定区域里面的所有的画布项。QcanvasItem可以被子类化,从而可以提供更多的客户画布项类型,或者扩展已有的画布项的功能。Qcanvas对象是由QcanvasView进行绘制的,QcanvasView对象可以以不同的译文、比例、旋转角度,剪切方式去显示同一个画布。Qcanvas 对象是理想的数据表现方式,它已经被消费者用于绘制地图和显示网络拓扑结构。它也可用于制作快节奏的且有大量角色的平面游戏。

5 主窗口
        QMainWindow类是为应用的主窗口提供一个摆放相关窗体的框架。一个主窗口包含了一组标准窗体的集合。主窗口的顶部包含一个菜单栏,它的下方放置着一个工具栏,工具栏可以移动到其它的停靠区域。主窗口允许停靠的位置有顶部,左边,右边和底部。工具栏可以被拖放到一个停靠的位置,从而形成一个浮动的工具面板。主窗口的下方,也就是在底部的停靠位置之下有一个状态栏。主窗口的中间区域可以包含其它的窗体。提示工具和“这是什么”帮助按钮以旁述的方式阐述了用户接口的使用方法。对于小屏幕的设备,使用Qt图形设计器定义的标准的Qwidget模板比使用主窗口类更好一些。典型的模板包含有菜单栏,工具栏,可能没有状态栏(在必要的情况下,可以用任务栏,标题栏来显示状态)。

6 动作
        应用程序通常提供给用户几种不同的方式去执行特别的动作。例如,大部分应用提供了一个“Save”动作给用于存盘的菜单(File|Save)以及工具栏(一个“软盘”图标的工具栏按钮)和快捷键(Ctrl+S)。Qaction类可以让上述过程变得简洁,它允许程序员在一个地方定义一个动作,然后把这个动作加入到菜单或者工具栏,这个过程与把菜单项加入到菜单的道理是一样的。

7 对话框
使用Qt 图形设计器这个可视化设计工具用户可以建立自己的对话框。Qt 使用布局管理自动的设置窗体与别的窗体之间相对的尺寸和位置,这样可以确保对话框能够最好的利用屏幕上的可用空间。使用布局管理意味着按钮和标签可以根据要显示的文字自动的改变自身大小,而用户完全不用考虑文字是那一种语言。

(对不起,最近太忙,就到这吧!)

0个回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-12-22 11:17 , Processed in 0.554715 second(s), Total 43, Slave 31 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表