QNXIDE下photon教程(一)——helloworld(2011-03-1514:12:16)转载看了几天的QNX,还是有点懵,不知道整个操作系统的定制流程是咋样的,唉。要是有个人指导一下就好了,可惜国内好像这方面的资料也不多,就先看看UI开发吧。第一个实验当然是经典的helloworld啦。教程基本上是翻译官方文档,是为了印象更深刻,以后回顾起来也比较方便。因为是使用IDE下的photon,所以必须要在IDE里面新建photon工程。取名tu1,选择一个窗口样式,然后从widget控制面板中拖动Label控件,然后在resource面板中的labeltext中输入helloworld!之后,在build中进行generateUI,再回到IDE中,build“tu1”,(在runconfiguration中确认模拟器连接正确,也就是说模拟器要启动,且工程建立时也要选择x86)。build之后选择runasc/c++application。在模拟器中便可看到刚才生成的应用窗口程序。QNXIDE下photon教程(二)——编辑资源(2011-03-1514:28:36)转载这节的课程是editingresources,也就是改变控件的一些特性,进而改变界面的风格样式。建立一个新的工程,tu2,选择plain样式的窗口,在窗口中放置一个button,可以随便改动button的大小。选中button,在resource面板中选择bevelwidth,改变框中的数值。观察button的变化。在resource面板中选择font,出现字体对话框,可随意改变字体样式。在resource面板中选择horzalignment,选择想要的对齐方式。在resource面板中选择basicflag,在出现的对话框中选中Pt_TOP_INLINE,Pt_TOP_INLINE,Pt_TOP_INLINE,Pt_TOP_INLINE,可看到button的中间出现一个小框。在resource面板中选择color:fill,在出现的颜色对话框中选择喜欢的颜色,button的填充颜色相应变化。接下来,使用pixmapeditor来编辑PtLable控件(pixmap是包括bitmap在内的各种图片资源),在resource面板中选择labeltype,出现对话框,选择Pt_IMAGE,done。然后选择labelimage特性,在出现的对话框中选择合适的图片,或者绘制图片。左侧鼠标左键为黑色的图标表示左键点击时的颜色,即画笔的颜色。鼠标右键为黑色的图标表示右键点击时的颜色,默认为背景颜色。编辑多行文字,在窗口中放置PtMultiText,拉大控件,点击resource面板中的TextString,在出现的对话框中输入几行文字,用enter键分行。done。调整文字的horzalignment,或者拉动控件的大小,观察文字的变化。在窗口放置PtList控件,拉大控件使其能输入多行文字。选择ListofItems打开listeditor,在编辑器底部的编辑框中输入文字,使用AddAfter,即可添加文字。创建一个template。选择一个按钮,Widget-DefineTemplate,出现了savetemplate对话框。Addfolder,userfolder是只有自己才有权限使用,而PhAB则是可以在用户之间共享的。选择userfolder,输入文件名字,确定之后,输入template的名字,也可以改变template的icon,确定以后在template面板中找到该控件。并使用之。QNXIDE下photon教程(三)——menu(2011-03-1515:41:29)转载这节主要是创建menu和menubar。重点是callback的链接和使用。几乎所有的控件都支持很多的回调。这些回调函数可以使应用程序接口与应用程序的代码交互。比如说,你想让用户点击按钮时应用程序执行一个动作,这种情况下,就需要连接一个回调函数到按钮的“Active”回调。在一些Windows环境下,只能连接代码函数到widget回调,但是在PhAB中,你可以连接整个窗口、对话框、menu等等。PhAB提供了两种基本类型的连接回调:(1)模型linkcallback:可以连接一个应用模型(窗口、对话框、menu等等)到任何的widget回调。当回调的条件满足后,模型就会打开。在本节教程中,要连接一个menu模型到一个按钮的Arm回调。(2)代码linkcallback:连接一个代码函数到任何的widgetcallback。当calback的条件满足时,widget就会调用这个函数。这种类型的linkcallback可以自动关闭父模型。在本节教程中,将会连接一个代码函数到一个menuitem的回调。关于instancenames:要从你的应用程序代码中进入widget,首先要给widget一个instancename。由于所有widget的instancename是放在同一个全局命名空间的,所以同一个应用程序中的两个widget不能具有同样的instancename。我们建议用模型作为每个instancename的前缀。比如,如果基本窗口有一个PtButtonwidget包含labeltext“Blue”,应该给这个widget一个instancename“base_blue”。创建两个功能菜单——File和Help,在PhAB中,菜单有两部分:菜单键(点击显示菜单)和菜单模型(包含菜单项)。使用linkcallbacks,要连接菜单模型到menubar中的File和Help按钮,也要连接一个代码类型的回调到Quit菜单项来关闭应用程序。1.创建一个新应用程序tu3.选择plain窗口样式。2.放置PtMenuBar到窗口左上角拖拉menubar的长度与窗口长度一致。3.放置PtMenuButton到menubar中,在resource面板中输入base_file作为此按钮的instancename。输入File作为按钮的labeltext。4.用同样的方法创建Help菜单项,instancename为base_help。创建File菜单模块:现在已经有了菜单按钮,就需要创建菜单模块了,从File菜单开始。1.Project-AddMenu.出现一个新的菜单模块。2.将菜单的名字由menu0改为filemenu。添加菜单项目:添加一些菜单项到File菜单中。1.点击resources面板中的MenuItemsresource,出现menueditor对话框:2.添加第一个菜单项--“New”.3.Instancename为file_new。4.点击应用,可以看到菜单项中有New菜单项,前缀是CMD,这说明这是一个命令项,也就是说一个可以调用PhAB回调菜单项。5.重复以上的步骤添加Save和Saveas两个菜单项。instancename分别是file_save和file_as。6.到此为止,已经添加了命令类的菜单项。现在要添加一个separator项,点击右上角的separator按钮。7.点击应用获取默认的separator样式——“Etached-in”。8.现在添加Quit项。点击Command按钮,输入Quit和file_quit作为itemtext和instancename。done。创建help菜单模块:1.创建help菜单并命名为helpmenu。2.在此模块中,放置一个命令类菜单项“AboutDemo”,instancename为help_about。连接linkcallbacks:回到之前创建的菜单按钮并连接到linkcallbacks,使按钮可以弹出菜单模块。1.连接一个模块类的linkcallbacks:(1)选择File菜单按钮,切换到callbacks控制面板中。(2)要使File按钮能弹出file菜单模块,就要将Arm回调连接到这个按钮,点击Arm,弹出callbackeditor。(3)在Moduletypes中可以选择想要连接的模块。由于本例中要将File按钮连接到一个菜单模块,所以选择Menu。(4)在Namelist中输入filemenu(File菜单模块的名字)或者从list中选择,这就将按钮和模块连接起来了。(5)点击应用添加linkcallbacks,然后点击done关闭编辑器。(6)重复以上步骤连接Help按钮到help菜单模块。连接一个代码类的linkcallbacks:现在连接一个代码类的link回调到File菜单的Quit项,使其能够终止应用程序。(1)打开并选择这个模块。(2)切换到Resources控制面板,点击MenuItems。(3)在MenuItems列表中选择Quit项。(4)点击Callback旁边的图标打开callback编辑器。。(5)当编辑器打开时,默认的callback类型是Code,所以直接在Function中输入quit作为函数的名字,(6)点击应用更新callback列表,然后点击done。(7)点击done关闭菜单编辑器。生成代码:(1)Build-GenerateUI,生成必要的应用程序文件。QNXIDE下photon教程(四)——对话框(2011-03-1608:23:49)转载本节讲述的是如何创建对话框,同时提供了如何启动代码来修改一个widget的资源,在widget显示之前。关于对话框:由于一般都不会两次使用同样的信息,对话框都是单实例模块。所以,不用同时实现同样的对话框超过一次,如果想要创建一个对话框的第二次事例,PhAB会把已经存在的对话框置顶。如果需要创建一个支持多事例的窗口,请使用窗口模块,在下一节中将学习窗口模块。关于instancename:为了能够更容易地从应用程序代码中进入widget,PhAB产生了一个全局变量和一个列表,两者都是基于widget的instancename。全局变量的前缀是ABN_,代表了widget的名字,列表的前缀是ABW_,代表了widget的instancename指针。例如,我们有一个widget命名为about_version,PhAB就会用这个名字产生一个全局变量ABN_about_version,和一个列表ABW_about_version.本节中,我们将学习如何使用这些产生的名字。(在整个应用程序中,一个widget的ABN_变量值是独一无二的。)连接一个对话框模块:1.复制tu3应用程序命名为tu4.(在IDE中选择Edit-Copy,Edit-Paste)2.打开之前创建的help菜单模块。3.点击资源中的MenuItems打开菜单编辑器。4.选择AboutDemo项,点击callback旁边的图标打开callback编辑器。5.编辑器打开时,默认的callback类型是code,在module类型中把callback类型变为dialog。6.在Name中,输入aboutdlg作为你想连接的对话框模块的名字(这个对话框现在还不存在,但是之后PhAB会要求你创建它。)7.在setupfunction中,输入aboutdlg_setup,这是我们给setup函数的命名,这个函数将在对话框实现前被调用。我们会用这个函数改变这个对话框中某个labelwidget的内容来显示一个版本号。8.由于我们想在对话框实现之前调用aboutdlg_setup函数,所以要确保pre-realize按钮被选择。9.嗲及location图标选择对话框出现时的位置。10.点击应用添加这个linkcallback,由于对话框模块现在还不存在,PhAB会要求你选择一个样式,选择plain,done。可以看到callback编辑器中的callback列表中出现了新的callback。11.done。done。添加widget到对话框:1.打开aboutdlg对话框模块。2.放置两个PtLabel在对话框上半部分的顶部,一个PtButton放置在底部