第12章 使用Qt Creator

第12章 使用Qt Creator

2023年7月9日发(作者:)

第12章使用QtCreator本章重点★了解QtCreator支持的平台和版本情况★了解QtCreator的组成和主要特点★掌握QtCreator的几种不同模式和操作方法★掌握QtCreator各个组成部分的操作方法★掌握使用QtCreator开发应用程序的流程和基本步骤12.1QtCreator概览QtCreator是Nokia出品的Qt4“官方”的跨平台IDE,它能够在Linux、MacOSX以及Windows等绝大多数平台上使用,它的界面简洁大方、操作便捷顺畅,是广大Qt开发人员的首选IDE之一。我以写书时最新的QtCreator1.2.1版为例,向大家详细介绍它的使用方法。当你安装了QtSDK后,QtCreator就已经安装到了你的系统中了。你也可以单独安装QtCreator,但是我并不推荐这种做法,因为你在开发时仍然需要QtSDK中的其它内容。有关QtCreator的安装这部分内容,请参看第4章。12.1.1支持的平台QtCreator支持以下平台或更高的平台版本。◆WindowsXPServicePack2◆WindowsVista◆(K)UbuntuLinux5.04◆(K)UbuntuLinux7.0432位和64位版本◆MacOS10.4及更高版本小贴士:如果在以上平台采用源代码编译的方式安装QtCreator的话,需要使用Qt4.5.0或更高的版本。笔者也建议读者朋友尽量使用Qt4.5.0及以上的版本。12.1.2主要特点QtCreator包含有如下重要特性:1.高度智能的代码编辑器支持代码高亮以及自动完成功能。4工程向导(ProjectWizard)使用ProjectWizard,用户可以轻松创建基于控制台的应用程序、GUI应用程序以及C++类库等多种类型的工程。3.集成帮助功能在QtCreator中可以查阅相关的Qt文档和示例程序。4.集成QtDesigner功能无缝集成了QtDesigner,使用者不用单独打开QtDesigner即可完成用户界面的创建工作。用户只需在ProjectExplorer中双击.ui文件,即可调用集成的QtDesigner完成编辑工作。5.模块间智能导航功能用户可以通过使用快捷键,来准确定位文件信息以及在不同的模块间导航。工程文件格式化功能支持将.pro文件作为工程描述文件。7.集成调试器可以使用GNU的GDB(开源版)以及Microsoft的CDB作为调试器(商业版)。12.2QtCreator的组成QtCreator主要由菜单(MenuBar)、模式选择器(ModeSelectors)、项目浏览器(ProjectInspector)、代码编辑器(CodeEditor)、输出面板(OutputPanes)、边栏(Sidebars)、快速导航面板(QuickOpenPane)等组件构成。在图12-1中显示了Edit模式下,QtCreator主要的组成部件以及布局情况。其它模式下的组成和布局我们将结合模式选择器(ModeSelectors)讲解。图12-1QtCreator布局架构12.2.1模式选择器(ModeSelectors)QtCreator有6种工作模式可供开发者选择,分别是:Welcome,Edit,Debug,Projects,Help,和Output。模式选择器允许开发者在处理不同的任务时可以快速的切换工作模式,比如编辑代码、浏览帮助、设置编译器环境等。在切换时,你可以通过在界面左边的模式选择器分栏上单击鼠标左键,或者使用相对应的快捷键。当你使用特定模式下才有的动作时,也会使你自动切换到相应的模式,比如当你依次单击菜单Debug/StartDebugging时,QtCreator将自动切换到Debug模式下。1.欢迎模式(WelcomeMode)如图12-2所示,在该模式下QtCreator显示一个欢迎屏幕。在这个模式下,你可以快速的载入最近的人机对话或者是独立的项目,也可以向QtCreator项目组提供反馈意见,甚至加入到QtCreator项目组中,成为其中的一员。这个屏幕分为3个专栏:GettingStarted、Develop和Community。在GettingStarted专栏下,你可以学习QtCreator的使用以及Qt4编程的相关知识和技能;在Develop专栏下,你可以快速的恢复与QtCreator的上一次对话过程,也可以打开新近使用的项目或者创建一个新的项目;在Community专栏下,你可以获取QtLabs网站上的新闻,也可以访问流行的Qt站点。当你在命令行下面调用QtCreator时,在不附加额外的参数的情况下将进入到这个欢迎模式下。图12-2欢迎模式界面2.编辑模式(EditMode)如图12-3所示,在Edit模式下,你可以编辑项目和源代码文件,在模式选择器右边一点的边栏(sidebar)上点击,你就可以在不同的文件中导航了。图12-3编辑模式界面3.调试模式(DebugMode)如图12-4所示,QtCreator提供了多种不同的方式辅助程序员查看应用程序运行的状态来调试程序。后面我们会结合具体例子讲解。图12-4调试模式界面4.项目模式(ProjectsMode)如图12-5所示,在项目模式下,首先你可以查看所有项目的列表,并可设置以哪一个项目为当前的活动项目。然后可以选定项目,针对构建(build),运行(run)以及代码编辑器等多个方面进行详细设置。图12-5项目模式界面5.帮助模式(HelpMode)如图12-6所示,主要是无缝集成了Qt的文档和示例中的相关内容,你可以不必另行打开QtAssistant,就可以在QtCreator的Help模式下获得帮助。图12-6帮助模式界面6.输出模式(OutputMode)如图12-7所示,你可以在Output模式下,观察各种流程的细节,比如qmake以及应用程序的编译、构建情况。这些信息你也可以再输出面板里面获得(OutputPanes)。图12-7输出模式界面12.2.2输出面板(OutputPanes)QtCreator的输出面板主要由4个子面板组成,分别是:BuildIssues,SearchResults,ApplicationOutput,和CompileOutput。它们在所有的模式下均可以使用。1.构建过程和结果(BuildIssues)子面板如图12-8所示,该面板主要显示与构建相关的信息,例如警告信息、错误信息等等,并且指出了该产生该信息的具体位置以及可能的原因。图12-8构建的流程与结果(BuildIssues)2.搜索结果(SearchResults)子面板该面板提供了执行搜索动作后的结果输出显示,搜索的范围可以是全局的,也可以是具体局部的,比如你可以在某一个指定的文档中搜索某个词组,也可以把范围扩大到所有项目或者是电脑上的硬盘目录等等。举例来说,我们在TextFinder目录下面搜索含有“TextFinder”这个词,如图12-9所示即是搜索的结果显示。图12-9搜索结果(SearchResults)3.应用程序输出子面板如图12-10所示,应用程序输出子面板显示了应用程序的运行状态,包括正常运行以及Debug模式下的信息,比如你可以在程序中调用qDebug()函数来查看输出情况。图12-10应用程序(构建结果)的输出(ApplicationOutput)4.编译(Compile)子面板如图12-11所示,编译子面板显示了所有来自编译器的输出信息,实际上它包含了更为详细的输出信息,包括BuildIssues子面板显示的信息。图12-11编译情况的输出(CompileOutput)12.2.3代码编辑器(CodeEditor)代码编辑器辅助开发者创建、编辑代码,并可在其间导航。它具有代码高亮、代码自动完成、上下文提示以及内嵌代码错误指示等特性。1.属性设置可以依次点击【Tools】→【】→【TextEditors】,来设置代码编辑器的各种属性。图12-12显示了如何设置Font&Colors(字体和颜色)属性。图12-12设置代码编辑器的字体颜色(Font&Colors)属性图12-13显示了如何设置Behavior(行为)属性。图12-13设置代码编辑器的行为(Behavior)属性图12-14显示了如何设置DisPlay(显示)属性。图12-14设置代码编辑器的展现(Display)等属性图12-15显示了如何设置Completion(代码完成)属性。图12-15设置代码编辑器的自动完成(Completetion)等属性2.快捷键QtCreator的代码编辑器支持很多的快捷键,表列出了常用的一部分:表12-1代码编辑器支持的快捷键代码块间导航选中代码块/取消选中代码块/选中上级代码块向上/向下移动某行代码代码自动完成格式化缩进代码块折叠/展开声明注释或取消注释删除一行代码在类的头文件和实现文件间切换增大或缩小字体的大小在声明和定义之间转换切换到外部的编辑器Ctrl+[和Ctrl+],一般我们常用在比如在{}代码块间导航Ctrl+U/Ctrl+Shift+U/再次按下Ctrl+UCtrl+Shift+Up/Ctrl+Shift+DownCtrl+SpaceCtrl+ICtrl+Ctrl+/Shift+DelF4Ctrl键+鼠标滚轮F2和Shift+F2键适用于名字空间、类、方法、变量、宏等.依次点击菜单Edit->Advanced->Openinexternaleditor3.代码完成功能(CodeCompletion)当你在代码编辑器中输入某个词组时,系统会自动弹出一个上下文提示窗口,里面列举了可能符合你的意图的完整代码,这个上下文提示窗口又被称为是“代码完成提示盒子”,其中常见的类别有类、名字空间、方法、变量、宏以及关键字等。表12-2显示了这些常见类别以及所对应的图标。表12-2常见类别图标类(Aclass)枚举常量(Anenum)枚举常量值(Anenumerator(valueofanenum))方法(Afunction)私有方法(Aprivatefunction)保护方法(Aprotectedfunction)变量(Avariable)私有变量(Aprivatevariable)保护变量(Aprotectedvariable)信号(Asignal)槽(Aslot)私有槽(Aprivateslot)保护槽(Aprotectedslot)关键字(Akeyword)宏(Amacro)名字空间(Anamespace)12.2.4会话管理器(SessionManagement)在QtCreator中,一个会话(session)指的是用户与QtCreator交互的一次过程,可以包括加载的项目、打开的文件以及代码编辑器的设置等等。当你运行QtCreator时,你已经开启了一个的对话,QtCreator会将它记录下来。如图12-16所示,你可以依次点击【File】→【Session】→【】来创建和管理对话。图12-16会话管理器要在不同的对话间切换,你可以依次点击【File】→【Session】来切换实现,如图12-17所示。如果你没有创建新的对话,并且没有选择任何对话,那么QtCreator将一直使用默认的对话。图12-17切换会话12.2.5Qt帮助集成功能(QtHelpIntegration)在QtCreator中使用帮助,有两种主要的方式,一种是随时按下F1键,一种是切换到Help模式下,QtCreator使用插件的方式将Qt的文档和示例集成进来。图12-18示例了使用F1键的方式,你可以选中某个词或者类名,甚至整条句子等,然后按下F1键,在QtCreator的右边将增加一个面板,在里面显示了文档中有关条款的内容。图12-18查阅帮助12.2.6Qt设计师集成功能(QtDesignerIntegration)如图12-19所示,在使用QtCreator开发应用程序时,常见的用法是用鼠标左键双击.ui文件,即可打开QtCreator的QtDesigner集成功能。你可以看到,QtCreator已经与QtDesigner完全集成在一起了。这样你就可以在不单独运行QtDesigner时,在QtCreator中完成应用程序界面的设计,并且与QtCreator的项目管理以及其它功能在一起获得对Qt项目的完整把握。图12-19在QtCreator中集成QtDesigner12.3快捷键和常用技巧众所周知,有的开发者喜欢使用鼠标完成常用的操作,而有些开发者更喜欢使用键盘快捷键。QtCreator的操作简单明了,它为主要的功能提供了对应的快捷键组合以及导航,这将帮助开发者提高开发效率。QtCreator提供了丰富的快捷键来辅助开发者加快开发进程。下表中列出了常用的快捷键。表11-3快捷键和常用技巧功能激活Welcome模式(ActivateWelcomemode)激活Edit模式(ActivateEditmode)快捷键Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+5激活Debug模式(ActivateDebugmode)激活Projects模式(ActivateProjectsmode)激活Help模式(ActivateHelpmode)功能激活Output模式(ActivateOutputmode)查找(Find)查找下一个(Findnext)回到代码编辑器(Gobacktothecodeeditor)跳转至代码的某一行(Gotoaline)在页面间导航(Navigatebetweenpages)启动调试(Startdebugging)停止调试(Stopdebugging)快捷键Ctrl+6Ctrl+FF3EscCtrl+LAlt+Left,Alt+RightF5Shift+F5在代码的声明和定义之间切换(Togglecodedeclarationanddefinition)F2在类的头文件和实现文件之间切换(Toggleheaderfileandsourcefile)F4切换到边栏(ToggleSideBar)切换到BuildIssues面板(ToggleBuildIssuespane)切换到SearchResults面板(ToggleSearchResultspane)切换到ApplicationOutput面板(ToggleApplicationOutputpane)切换到CompileOutput面板(ToggleCompileOutputpane)Alt+0Alt+1Alt+2Alt+3Alt+4小贴士:就笔者的体会,把键盘与鼠标操作结合起来使用,往往效率最高,因此熟悉主要功能的快捷键是很有必要的。但大家也不必强求自己非要掌握和使用哪种方式,只要熟能生巧,顺其自然就好。12.4QtCreator构建系统的设置QtCreator的构建系统是建立在qmake和make基础之上的,设置QtCreator的构建系统,本质上就是对qmake和make进行设置,只不过是以图形界面形式完成。对QtCreator构建系统的设置,默认情况下其实是对qmake的设置,只不过QtCreator为我们提供了GUI界面,使得这些工作变得简单和生动起来,这就需要切换到Projects模式,方法是使用鼠标或者按下Ctrl+4组合键,当然前提是你已经打开了一个工程。如图12-20所示。图12-20切换到Projects模式默认情况下,QtCreator创建debug和release两个版本,它们都使用DefaultQtVersion,每一个版本都有【General】、【BuildEnvironment】、【BuildSteps】三个分栏,你可以在其中设置相关的内容。在介绍如何设置之前,先了解几个常用术语。表11-4常用术语术语含义Auto-detectedQt如果你在系统的PATH目录中设置了Qt的目录,那么qmake将自动发现这个版本,称为Auto-detectedQt。DefaultQt它默认就是Auto-detectedQt。如果你在PATH中没有设置Qt的目录,那么QtCreator将把自动寻找到的Qt4版本作为DefaultQt,并且你在创建新的工程时,将采用这个版本。你可以依次点击主菜单的Tools->Options->Qt4->DefaultQtVersion.中查看DefaultQt。ProjectQt这是你的具体项目采用的Qt版本。你可以通过依次点击Build&Run->BuildSettings->BuildConfigurations来查看并设置它。默认情况下,它等同于DefaultQt。ShadowBuild它的机理类似于大家所熟悉的影子模式,可以命名为“以影子模式构建(项目)”采用这种模式构建时,将在一个与你的项目的源代码目录不同的目录下进行,而你的工程源目录将是“干净”的,不会有任何的改动。当你的工程设置需要频繁变更时,使用影子模式以适应各种情况是最佳的选择。.在【General】标签页中,如图12-20所示,你可以为项目选择Qt的版本,要不要使用ShadowBuild等。在【BuildEnvironment】标签页中,如图12-21所示,你可以为QtCreator设置环境,如常见的PATH、QTDIR、LIB变量等,当你使用SDK方式安装Qt,安装程序会把这些环境为你设置好,不必手动修改。图12-21设置【BuildEnvironment】标签页图12-22设置【BuildSteps】标签页在【BuildSteps】标签页中,如图12-22所示,你可以为QtCreator配置qmake和make的属性,更进一步的,你可以自定义编译的具体步骤。12.5处理项目间依赖关系(Dependencies)如果你在一次对话中加载了多个项目,你就可以设置它们之间的依赖关系,这也将影响你的项目的构建顺序。具体做法是打开Dependencies标签页,在其中选中你的依赖,如图12-23所示,我们同时载入了两个项目:textfinder和stylesheet,并以textfinder工程为当前工程(activeproject),点击Dependencies标签页,选中stylesheet前面的复选框,这时textfinder工程就以stylesheet为依赖了。图12-23设置项目间的依赖关系12.6Qt多版本共存时的管理QtCreator允许使用多个Qt4版本,并且可以在不同的版本间快速切换。当QtCreator启动时,它首先会根据环境变量PATH中设定的目录寻找Qt4,这个被自动找出来的Qt4版本称作“Auto-detectedQt”。术语“versionofQt”指的通常也是Auto-detectedQt。当然了,读者朋友如果只是安装了一个版本的Qt4,并且准备只使用这一种的话,只需要正确的设定PATH变量,而无需手动配置Qt的版本了(如果使用SDK方式安装,就更为简便,Qt4SDK会自动设置环境变量),这一节就可以略过不看。表12-4列出了与此有关的常用术语,了解它们的含义很有必要。此外,也可以自由的添加或删除不同的Qt版本。方法是依次点击菜单【Tools】→【】→【Qt4】→【QtVersions】,如图11-24所示,如果是在Windows平台上使用MinGW作为编译器,那么需要告诉QtCreator你的MinGW安装到了什么地方,当然如果是使用SDK方式安装的Qt,则无这一步的必要。设置它的方法是依次点击【Tools】→【】→【Qt4】→【QtVersions】→【MinGwDirectory】。如果编译安装Qt时是专为MicrosoftVisualC++的,那么QtCreator将自动为你设置好这些环境变量。图12-24设置Qt的版本小贴士:上述这些设置也可以在上一节讲到的配置工程的构建系统中完成,请读者自行验证。11.7使用定位器在代码间快速导航QtCreator提供了一个定位器,它位于QtCreator窗体的底部,它是一个智能的编辑框(lineedit),你可以使用它在你的项目内部或硬盘上执行不同的定位(搜索)任务,如可以定位文件、类、方法等等。与其它我们以前熟悉的IDE中的“搜索”器或定位器不同的是,当你用鼠标左键在编辑框中点击时,它将弹出一个上下文窗口。如图12-25所示。图12-25定位器的上下文窗口11.7.1如何定位文件直接举例子吧,假设你想打开项目中这个文件,那么你可以使用鼠标在定位器上点击或者按下Ctrl+K键,在其中输入文件名即,然后按下回车键。QtCreator将使用代码编辑器打开它。你也可以不输入全称,而是输入关键字,或者加上*和?这样的通配符,这时定位器将会把所有符合条件的信息罗列出来,请你选择。在其中选择你满意的项目,完成定位即可。11.7.2如何设置过滤条件你可以为定位器设置许多不同的过滤条件(Filters),这样你就可以执行各种不同的定位任务。下面列出了一些常用的过滤条件。◆在你的硬盘上的任意文件(将通过文件系统查找)◆在你定义的子目录结构中的文件◆在你的工程文件(.pro)中提到的文件,如头文件、实现文件、资源文件、资源集文件以及.ui文件◆任何打开的文档◆在你的项目中的定义或引用的类或方法◆在Qt文档中的帮助主题◆在你的代码编辑器中的任意指定的一行代码那么如何使用这些过滤条件呢,方法按下Ctrl+K键或者使用鼠标,激活定位器,然后输入冒号:,接着输入一个空格,在这个空格之后输入你的定位前缀。举个例子,假如你需要定位QDataStream这个类的定义,那么就在激活定位器后,依次输入冒号、空格以及QDataStream,如图12-26所示。定位器将为你列出找到的相关信息,选中其中的一项,按下回车键即可定位到QDataStream的定义,(也可使用鼠标操作,请读者自行验证)。如图12-27所示。图12-26输入过滤条件图12-27在代码编辑器中查看如果你觉得系统内置的这些过滤条件不能满足你的要求,那么你可以自己定义一个。方法是用鼠标点击定位器上的那个用来搜索的按钮,然后在弹出的上下文菜单上选择【】,如图12-28所示。图12-28自定义过滤条件上下文菜单接下来在弹出的对话框中点击【Add】按钮,创建一个新的过滤条件。这将弹出【FilterConfiguration】对话框,如图12-29所示,为你的过滤条件起一个名字,选择搜索目录,设置可能的文件后缀名,最后再设置关键字的前缀。图12-29增加新的过滤条件设置完成后,关闭这个对话框。定位器将按照你指定的过滤条件查找适合的信息并缓存起来。但是定位器的前端显示还没有更新,所以你需要按图12-28所示的上下文菜单中的【Refresh】选项来完成后台缓存和前端显示的同步。表12-5列出了常见过滤条件的操作方法以及示意的屏幕截图。表12-5常见过滤条件的操作方法和示意图过滤条件组合键屏幕截图跳转至当前文档依次输入Ctrl+K,中的某一行l,空格,代码的行号过滤条件定位一个符号组合键依次输入屏幕截图(类、文件名、Ctrl+K,:,空格,宏等)的定义符号的名字定位某一条帮助依次输入主题Ctrl+K,?,空格,主题的名字定位一个打开的依次输入Ctrl+K,文档o,空格,文档名定位文件系统中依次输入Ctrl+K,的某一个文件(浏览文件系统)f,空格,文件名过滤条件组合键屏幕截图定位在最近载入依次输入Ctrl+K,的项目中的某一a,空格,文档名个文档定位在当前项目依次输入Ctrl+K,中的某一个文档p,空格,文档名定位一个类的定依次输入Ctrl+K,义c,空格,类名定位一个方法的依次输入Ctrl+K,定义m,空格,方法名11.8如何创建一个项目第1步,创建项目要创建一个新项目,可以依次点击菜单【File】→【】→【Projects】,你可以创建下列几种项目类型:◆Qt4ConsoleApplication–控制台应用程序◆Qt4GuiApplication–GUI应用程序(主要是含有界面布局的类型)◆C++Library–C++库这里我们创建一个基于Qt4GuiApplication类型的例子,如图12-30所示,点击【OK】按钮进入下一步。图12-30第1步-创建一个新的项目第2步,设置项目名称和保存位置接下来,如图12-31所示,我们设置项目的名称和路径。注意,项目的名称和路径中尽量不要包含空格和其它特殊的字符,切记!设置完成后,点击【Next】按钮进入下一步。图12-31第2步–设置项目名称和存放位置第3步,选择需要的Qt模块如图12-32所示,在其中罗列的选项中勾选你需要的Qt模块,由于我们创建的是GUI应用程序,因此”QtCoreMoudle”和”QtGuiMoudle”模块是默认必须选择的,其它的可以根据需要选择。选择完后,点击Next按钮进入下一步。图12-32第3步–选择必需的Qt模块第4步,指定类信息如图12-33所示,这里最重要的是指定类的名称,类的头文件、实现文件以及.ui文件的名称会随之改变。还有就是要指定你的类的基类,如QMainWindow、QWidget等,可以从下拉列表框中选择。设置完成后,点击Next按钮进入下一步。图12-33第4步–指定类信息第5步,完成项目的创建如图12-34所示,到了这一步,请仔细屏幕中列出的所有文件是否符合你的要求,如果不符,可以点击Back按钮,回去重新设置。如果确认无误,点击Finish按钮完成项目的创建。图12-34第5步–完成项目的创建12.9实例讲解在本节中,我们以程序textfinder为例,向大家详细讲解使用QtCreator创建应用程序的全过程,我们将使用QtCreatro创建工程和代码,并使用QtDesigner创建用户界面。如果你对如何使用QtDesigner还不太熟悉的话,建议回头看看前几章。这个例子的运行效果如图12-35所示。图12-35程序运行效果12.9.1程序运行内部机理图12-36是笔者画的一个本程序的运行内部机理示意图,从中可以清晰的看到各个组件式是如何配合起来完成程序运行的。图12-36程序的内部机理12.9.2设置环境在前面我们已经讲到,如果你是采用SDK安装的Qt4,那么正常情况下,安装程序已经自动为你设置好了所需的环境。如果你依次点击菜单【Tools】→【】→【Qt4】,却发现没有找到任何正确的Qt版本,那么你需要自行设置Path环境变量,这个步骤与平台相关:◆在Windows和Linux下面:依次点击菜单【Tools】→【】→【Qt4】。◆在MacOSX上面:依次点击菜单【Qt4】→【Preferences】。小贴士:如果你使用VisualStudio编译Qt,再单独安装QtCreator,那么QtCreator中环境变量的设置与VisualStudio中将保持一致。12.9.3创建并组织项目接下来按照上一节所述的步骤创建项目并组织好项目文件。注意这里我们要选择QWidget作为基类。在我们的项目中,应该包含如下文件:◆textfinder.h◆◆◆◆其中,.h和.cpp文件包含了程序运行所必需的基本代码,而.pro文件已经完成了。在接下来的步骤中,我们将使用QtDesigner设计界面,并添加完成功能所必须的代码。11.9.4设计用户界面在你的项目浏览器(ProjectExplorer)中双击,将打开集成的QtDesigner,在里面完成对用户界面的设计,并依照表12-6列出的内容设置各个元素的属性,完成后的情形如图12-37所示。表12-6界面元素属性窗口部件QLabelQLineEditQPushButtonQTextEditQGridLayoutQVBoxLayout名称(objectName)无lineEditfindButtontextEdit无无图12-37界面布局该界面元素的布局方式如下:Keyword标签和旁边的lineEdit以及最右边的Find按钮使用QGridLayout组合,再与下面的textEdit使用QVBoxLayout组合。12.9.5头文件接下来我们看看textfinder.h这个头文件时怎样写的。由于我们的用户界面只有一个,所以决定采用单继承的方式使用.ui文件,这就需要添加一个私有的成员变量:Ui::TextFinder*ui;我们需要添加一个私有的槽函数,以执行查找操作,它是on_findButton_clicked();我们还需要一个私有成员函数loadTextFile(),用来读取并显示我们在文本框中输入的文本文件的内容。以下是头文件中这部分的代码:privateslots:voidon_findButton_clicked();private:Ui::TextFinder*ui;voidloadTextFile();12.9.6实现文件现在我们看看如何书写实现文件,这其中的关键是loadTextFile()方法:voidTextFinder::loadTextFile(){QFileinputFile(":/");(QIODevice::ReadOnly);QTextStreamin(&inputFile);QStringline=l();();ui->textEdit->setPlainText(line);QTextCursorcursor=ui->textEdit->textCursor();sition(QTextCursor::Start,QTextCursor::MoveAnchor,1);}在上面这段代码中,我们首先使用一个QFile类的对象来加载文本文件,并使用QTextStream来读取它的内容,最后使用setPlainText()方法来显示它。在实现文件开头要加入下面的头文件声明:#include#include在on_findButton_clicked()中,我们获得了搜索的字符串并使用find()方法在整个文本文件中搜索该字符串,下面是实现代码:voidTextFinder::on_findButton_clicked(){QStringsearchString=ui->lineEdit->text();ui->textEdit->find(searchString,QTextDocument::FindWholeWords);}这之后,我们需要在类的构造函数中调用loadTextFile()这个方法,注意它应放在setupUi()方法的后面,切记!TextFinder::TextFinder(QWidget*parent):QWidget(parent),ui(newUi::TextFinder){ui->setupUi(this);loadTextFile();}由于我们对槽函数的命名方式符合“自动关联”的规则,所以on_findButton_clicked()槽会被自动调用。我们在本书的前几章讲过,这是由于uic工具生成的ui_textfinder.h文件中加入了下面这行代码的缘故,这里再次提出以加深印象。QMetaObject::connectSlotsByName(TextFinder);12.9.7资源集文件我们需要一个资源集文件(.qrc)来描述程序用到的资源,以前我们介绍的主要是如何加入图标、图像文件,这次看看如何加入文本文件。其实方法是类似的,在项目浏览器(ProjectExplorer)中右键点击项目,在上下文菜单中选择【】→【Qt】→【QtResourceFile】,将弹出【NewResourcefile】对话框。图12-38NewResourcefile对话框如图12-38所示,填入文件名字和路径,然后点击Continue按钮,进入下一步。图12-39选择工程并加入文件如图12-39所示,选中一个项目以加入资源集文件,这里是textFinder,并确保选中【AddtoProject】,然后点击【Done】按钮。如图12-40所示,你的资源集文件将被资源编辑器(ResourceEditor)打开并显示出来,首先点击【Add】按钮,在下拉项中选择【AddPrefix】,这将添加一个斜线;接下来再次点击【Add】按钮,这次选择【AddFile】,找到文件的位置并添加它。图12-40编辑资源集文件12.9.8编译运行程序现在,所有必需的文件和准备工作都已完成,你可以按下Ctrl+R组合键或者点击图标来编译运行你的程序了,程序运行的效果大致如图12-35所示。12.10使用QtCreator调试程序QtCreator集成了强大的调试器,提供了丰富多样的调试功能和选项,足以满足开发者的需要。12.10.1调试器引擎QtCreator本身并没有调试器,它必须借助其它的调试器引擎,并为它们提供了一个图形化的前端界面。表12-7示出了在所支持的平台上,QtCreator使用的调试器。表12-7QtCreator使用的调试器引擎平台Linux,Unixes,MacOSgccWindows/MinGWWindowsgcc编译器调试器引擎GNUSymbolicDebugger(gdb)GNUSymbolicDebugger(gdb)MicrosoftVisualC++CompilerDebuggingToolsforWindows/MicrosoftConsoleDebugger(CDB)在QtCreator中,你可以使用调试器前端界面逐行单步或逐过程调试程序,设置断点,检查堆栈中的内容,查看局部或全局变量的值等等,这些和我们常见的调试器提供的功能并无二致。而上述的原生信息,QtCreator会以清晰、简明的方式展现给程序员,这将使得原本令人生畏的调试工作变得简单而有趣。除了像堆栈查看器、局部变量和观察器、寄存器查看器等这些主流IDE都会提供的功能外,QtCreator还提供了许多的功能以帮助开发者提高效率。由于调试器前端对Qt的内部机制了如指掌,所以当程序出现问题时,它能够明晰描述症状。表12-8示出了这些调试器引擎在单独安装时的一些需要注意的事项。表12-8调试器引擎的相关信息调试器引擎GDB(X11平台)需要GDB6.8或以上版本GDB或CDB可以从MicrosoftDeveloperNetwork上自由下载CDB,版本6.10以上,注意区分32位和64位版;注意事项(Windows平台)如果在Windows上使用SDK方式安装Qt4开源版,那么仍将使用GDB作为调试器引擎;如果使用MicrosoftVisualC++的编译器编译安装QtCreator,那么将使用CDB作为调试器引擎,并且默认情况下,QtCreator将会检查%ProgramFiles%DebuggingToolsforWindows这个路径下是否包含了所有需要的调试器引擎的头文件。12.10.2与调试器交互在Debug模式下时,QtCreator提供了许多的锚接窗口来辅助开发者与程序进行交互。常见的一些被设置为缺省可见的,不常使用的则缺省被隐藏。你可以依次点击【Debug】→【View】来配置它们的显隐。图12-41设置常见辅助视图的显隐如图12-41所示,你可以通过点击【Locked】菜单项来锁住或解锁你的锚接窗口的布局,就像设置这些锚接窗口的显隐一样。你的锚接窗口的位置将被QtCreator“记住”,下次启动时它将根据上次的记忆来布局。12.10.3断点你可以在断点视图(Breakpointsview)中查看断点。无论你的程序是否在运行和调试中,断点视图都是默认并且随时可见的。如图12-42所示,你可以在【Breakpoints】视图中查看断点设置的情况。图12-43显示了详细的断点信息。图12-42在【Breakpoints】视图中查看断点图12-43断点的详细信息所谓断点,就是由程序开发者设定的一系列条件,但程序以调试方式运行时,一旦符合引发断点的“条件”,程序便中断执行,此后程序开发者便可以检视程序在运行时的状态,继而控制程序的运行,直至找出问题所在。在QtCreator中,我们通常可以把断点与源代码文件或者其中的某一行关联起来,也可以把它放在某个方法的起始处(通常指定义处)。下面是设置断点的具体“规则”:◆在某一行代码设置断点--在代码行行号的左边缘处点击鼠标左键或者按下F9键(在MacOSX系统中是F8键)◆在某一个函数处设置断点—依次点击菜单【Debug】→【】,在其中输入函数的名字你可以这样去掉一个断点:◆在代码编辑器内断点标识处用鼠标左键再次点击◆在断点视图中选中某个断点,并按下Delete键◆在断点视图内点击鼠标右键,在弹出的上下文窗口中选择【DeleteBreakpoint】小贴士:断点可以在任意时刻设置-在程序开始调试之前和正在调试之时均可。断点的设置也会作为一部分被当前的会话所保存。12.10.4程序的调试运行要在调试模式下启动运行一个Qt应用程序,你可以依次点击菜单项【Debug】→【StartDebugging】,或者按下F5键即可。QtCreator将检查程序代码或设置是否有更新,并在必要时重新编译项目,然后调试器将接管并启动程序的运行。提示:Qt应用程序在调试模式下启动运行时,往往需要一段时间,从几秒到若干分钟不等,这取决于你的机器的配置以及程序的复杂程度(比如应用了QtWebKit模块的程序可能要多花费一些时间)。当程序调试运行未遇到断点时,它与直接运行状态并无区别。开发者可以依次点击菜单项【Debug】→【Interrupt】或者直接按下如图所示的调试器状态栏上的【Interrupt】按钮来中断程序的运行,这与程序在运行时遇到断点而停下来的效果是一样的,如图12-44所示。图12-44调试器状态栏上的【Interrupt】按钮当程序中断时,QtCreator将做如下的事情:◆获得程序中断处在堆栈中的地址◆获得局部变量的值◆检视并更新观察器(Watchers)视图内容◆更新Registers、Modules以及Disassembler视图这时我们可以在Debugger视图中检视到程序更为详细的状态。要结束调试状态,可以按下Shift+F5键。按下F10键可以进入逐行调试状态,按下F11键进入逐过程调试状态,按下F5键可以使程序运行到下一个断点处,如果后面没有断点了,程序将完整的运行起来,这种情况仍然是在调试状态下的运行。12.10.5堆栈视图(StackView)当被调试的程序在断点处中断时,QtCreator将在堆栈视图中显示出程序到达断点处之前所经历的那些函数。这些函数对应到被称作是“堆栈框架节点”,每一个节点对应一个函数。如图12-45所示,QtCreator显示了这些函数所在的文件名、在源代码里面的行号。图12-45堆栈视图有些情况下,不是所有的框架节点都能够准确的对应到源代码中的一个位置,因而也就没有相应的调试信息,这些调试框架将被灰色显示。当你在堆栈视图里面显示的某一行处使用鼠标左键双击时,代码编辑器将跳转至相应的代码行,QtCreator将更新局部变量和观察器视图,就像把断点设置到这个地方而程序正好在这里中断时的情形一样。12.10.6线程视图(ThreadView)当我们调试一个多线程应用程序时,如图12-46所示,线程视图(threadview)和调试器状态栏上的”Thread”组合框(见图12-47)被用来在不同线程间切换,这时堆栈视图(stackview)也将会随着做出相应的调整。图12-46线程视图图12-47调试器状态栏上的Thread组合框12.10.7局部变量和观察器视图(LocalsandWatchersView)当程序在调试器的控制下中断时,QtCreator将取得堆栈里面的最上层框架节点的相关信息并把它们显示在局部变量和观察器视图里面。局部变量和观察器视图通常由一个树形结构组成,里面有许多的一级节点,第二级节点等等层次的数据,比如数据结构和类等信息就不是显示在第一级节点里面的。要查看更为详细的信息,可以逐级点开这些节点前面的“+”号。你也可以在局部变量和观察器中更改变量的内容(比如常见的int和float值),以界定你想确定的变量值的限值。这可以通过双击”Value”栏,并在可编辑区填入你的新的取值,然后按下回车键(Enter或Return键),之后再接着调试程序。小贴士:你对观察器里面项目的设置将被保存到这次会话里面,下次打开对话时,这些设置仍然有效。12.10.8模块视图(ModulesViews)默认情况下,模块视图也是不显示的。它的主要作用是使开发者了解程序中用到了那些模块,严格意义上来说,它不应该是在调试模式下才有的功能。一个常见的模块视图如图12-48所示。图12-48模块视图12.10.9反汇编和视图(DisassemblerView)和寄存器视图(RegistersView)默认情况下,反汇编视图和寄存器视图是隐藏的。反汇编视图显示了断点处所在的函数的反汇编代码,如图12-49所示;寄存器视图显示了当前CPU的寄存器的状态,如图12-50所示,当你需要对程序的底层(与系统硬件接触)进行检视和控制时,这两个视图尤其有用。当我们使用逐过程调试的方法时,经常会用到它们。图12-49反汇编视图图12-50寄存器视图12.10.10程序调试实例在我们的这个TextFinder例子里面,我们要使用QString读取一个文本文件,然后再用一个QTextEdit把它的内容显示出来。在其中我们定义了一个QString类型的变量line,然后在附近设置一个断点,用来查看line变量的内容,请大家跟着我的步骤进行调试。图12-51设置断点首先是设置断点,如图12-51所示,将光标移动到选定的位置,按下F9键,或者在行号前点击鼠标左键完成断点的设置。然后按下F5键,启动调试。如图12-52所示,在调试模式(DebugMode)下,我们可以在断点视图(BreakpointsView)中查看已经设置的断点情况。要取消断点,可以再次点击F9键。图12-52查看断点设置情况可以在局部变量和观察器视图中查看变量的内容,如图12-53所示,显示了line等变量的内容。图12-53查看line变量的内容下面是我们的程序中的槽函数on_findButton_clicked()的代码,我们将修改代码中的部分内容,形成一个小的逻辑错误,然后示范调试的步骤。原始正确的代码如下:12345678QStringsearchString=ui_lineEdit->text();QTextDocument*document=ui_textEdit->document();boolfound=false;if(isFirstTime==false)document->undo();if(searchString==""){QMessageBox::information(this,tr("EmptySearchField"),"enterawordandclickFind.");9}10else{617QTextCursorhighlightCursor(document);QTextCursorcursor(document);ditBlock();QTextCharFormatplainFormat(rmat());QTextCharFormatcolorFormat=plainFormat;eground(Qt::red);while(!()&&!()){18highlightCursor=document->find(searchString,highlightCursor,QTextDocument::FindWholeWords);19if(!()){2021found=true;sition(QTextCursor::WordRight,QTextCursor::KeepAnchor);22}}harFormat(colorFormat);tBlock();2425isFirstTime=false;if(found==false){26QMessageBox::information(this,tr("WordNotFound"),"Sorry,thewordcannotbefound.");}}我们将第6行改为:if(searchString!="")大家注意,改动之处是把比较运算符==变成了!=,这时运行程序,无论你输入任何有效的字符,程序的运行结果总是与你的预期相反。那么就需要设置断点,调试程序了。在第一行处按下F9键,然后按下F5键开始调试,如图12-54所示,使用鼠标点击调试器工具栏上的常用按钮或者按下对应的快捷键,执行逐行调试或逐过程调试均可,如图11-54所示。程序单步执行到第6行时,你将会发现这个逻辑错误。把它更正过来,再次调试程序即可。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1688893533a181763.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信