加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 Qt教程及软件(超级浅显易懂_非常适合初学者)

Qt教程及软件(超级浅显易懂_非常适合初学者).pdf

Qt教程及软件(超级浅显易懂_非常适合初学者)

南柯
2013-12-02 0人阅读 举报 0 0 暂无简介

简介:本文档为《Qt教程及软件(超级浅显易懂_非常适合初学者)pdf》,可适用于人文社科领域

Qt教程及软件QtCreator系列教程为了使更多的Qt初学者能尽快入门Qt也为了Qt及QtCreator的快速普及我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显虽然教程的语言可能不规范但是它却被数十万网友所认可。我们会将这一系列教程一直写下去它将涉及Qt的方方面面。本系列教程一直在更新……版权声明:该系列教程全部原创版权归wwwyafeilinuxcom所有您可以自由转载但必须保留该声明且不能用于商业用途。进入qt帮助教程目录进入开源项目目录进入读者资料整理目录蛋蛋整理()欢迎学习交流也希望有心人继续整理相关资料附在本文后边并通知本人。文档修订记录:整理了wwwyafeilinuxcom的qtcreater教程编制了部分目录整理人蛋蛋qq:进一步修订后请联系我我更新相关记录文档修订记录:网站专题类:专题类:方块游戏系列Qt串口通信专题Qt涂鸦板程序图文详细教程连载类:一、QtCreator的安装和helloworld程序的编写二、QtCreator编写多窗口程序三、QtCreator登录对话框四、QtCreator添加菜单图标五、QtCreator布局管理器的使用六、QtCreator实现文本编辑七、QtCreator实现文本查找八、QtCreator实现状态栏显示九、QtCreator中鼠标键盘事件的处理实现自定义鼠标指针十、QtCreator中实现定时器和产生随机数十一、QtD绘图(一)绘制简单图形十二、QtD绘图(二)渐变填充十三、QtD绘图(三)绘制文字十四、QtD绘图(四)绘制路径十五、QtD绘图(五)显示图片十六、QtD绘图(六)坐标系统十七、QtD绘图(七)Qt坐标系统深入十八、QtD绘图(八)涂鸦板十九、QtD绘图(九)双缓冲绘图简介二十、QtD绘图(十)图形视图框架简介二十一、Qt数据库(一)简介二十二、Qt数据库(二)添加MySQL数据库驱动插件二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一)二十四、Qt数据库(四)利用QSqlQuery类执行SQL语句(二)二十五、Qt数据库(五)QSqlQueryModel二十六、Qt数据库(六)QSqlTableModel二十七、Qt数据库(七)QSqlRelationalTableModel二十八、Qt数据库(八)XML(一)二十九、Qt数据库(九)XML(二)三十、Qt数据库(十)XML(三)三十一、Qt及QtCreatorbeta版安装全程图解三十二、第一个QtQuick程序(QML程序)三十三、体验QML演示程序三十四、QtQuickDesigner介绍三十五、QML组件三十六、QML项目之Image和BorderImage三十七、Flipable、Flickable和状态与动画三十八、QML视图三十九、QtDeclarative模块四十、使用NokiaQtSDK开发Symbian和Maemo终端软件四十一、Qt网络(一)简介四十二、Qt网络(二)HTTP编程四十三、Qt网络(三)FTP(一)四十四、Qt网络(四)FTP(二)四十五、Qt网络(五)获取本机网络信息四十六、Qt网络(六)UDP四十七、Qt网络(七)TCP(一)四十八、Qt网络(八)TCP(二)目录预留系列教程会在QtCreator正式推出后大幅度更新。。。。。(预计年月)Qt系列开源软件为加快初学者的入门和Qt的快速普及我们在以后会陆续推出一系列开源软件。使用QtCreator享受编程的快乐让我们一起行动起来!第一款软件:多文档编辑器第二款软件:音乐播放器第三款软件:局域网聊天工具(局域网聊天工具月日更新添加文本智能编辑功能)第四款软件:Wincom串口调试软件(附有Lincom的源码)期待……这些文章建议有心人整理一下附在本文后边我留下了尽可能大的目录空间网友的Qt相关文章HelloQt(在Linux下编写运行Qt程序)Qt文章转载免责声明:以下所有文章均转载自网友的博客或各相关网站其版权归原作者所有。我们在所有的文章中都明确加入了原作者的版权声明和原文出处如果有任何问题请与原作者联系本站不对文章内容付任何责任。如果您不想让您的文章在本站转载请联系我们wwwyafeilinuxcom。在线教程Qt参考文档Qt学习之路文章列表Qt的graphicsView框架ATEVBIIWINCE板上跑QT程序架设移动开发环境:Qtwince平台OpenGL贴图问题(转帖)OpenGL实现场景漫游(转帖)上网本版MeeGo正式发布核心软件平台支持N(转载)MeeGo为Linux带来魔法(转载)Maemo青涩的机会辽远的未来(转载)Qt编写Mplayer前端程序(转载)目录预留目录预留目录预留目录预留本文章原创于一、QtCreator的安装和helloworld程序的编写wwwyafeilinuxcom转载请注明出处。我们这里讲述windows下的QtCreator在Linux下基本相同。本文先讲述基本的下载、安装和最简单程序的编写然后在附录里又讲解了两种其他的编写程序的方法。首先到Qt的官方网站上下载QtCreator这里我们下载windows版的。下载地址:http:qtnokiacomdownloads如下图我们下载:DownloadQtSDKforWindows*(Mb)下载完成后直接安装即可安装过程中按默认设置即可。运行QtCreator首先弹出的是欢迎界面这里可以打开其自带的各种演示程序。我们用File>New菜单来新建工程。这里我们选择QtGuiApplication。下面输入工程名和要保存到的文件夹路径。我们这里的工程名为helloworld。这时软件自动添加基本的头文件因为这个程序我们不需要其他的功能所以直接点击Next。我们将baseclass选为QDialog对话框类。然后点击Next。点击Finish完成工程的建立。我们可以看见工程中的所有文件都出现在列表中了。我们可以直接按下下面的绿色的run按钮或者按下CtrlR快捷键运行程序。程序运行会出现空白的对话框如下图。我们双击文件列表的dialogui文件便出现了下面所示的图形界面编辑界面。我们在右边的器件栏里找到Label标签器件按着鼠标左键将其拖到设计窗口上如下图。我们双击它并将其内容改为helloworld。我们在右下角的属性栏里将字体大小由改为。我们拖动标签一角的蓝点将全部文字显示出来。再次按下运行按钮便会出现helloworld。到这里helloworld程序便完成了。QtCreator编译的程序在其工程文件夹下会有一个debug文件夹其中有程序的exe可执行文件。但QtCreator默认是用动态链接的就是可执行程序在运行时需要相应的dll文件。我们点击生成的exe文件首先可能显示“没有找到mingwmdll因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”表示缺少mingwmdll文件。解决这个问题我们可以将相应的dll文件放到系统中。在QtCreator的安装目录的qt文件下的bin文件夹下(我安装在了D盘所以路径是D:Qtqtbin)可以找到所有的相关dll文件。方法一:在这里找到mingwmdll文件将其复制到C:WINDOWSsystem文件夹下即可。下面再提示缺少什么dll文件都像这样解决就可以了。方法二:将这些dll文件都与exe文件放到同一个文件夹下。不过这样每个exe文件都要放一次。方法三:将D:Qtqtbin加入系统Path环境变量。右击我的电脑>属性>高级>环境变量>在系统变量列表中找到Path,将路径加入其中即可。附:用纯源码编写。新建空的Qt工程。工程名为helloworld并选择工程保存路径(提示:路径中不能有中文)。在新建好的工程中添加文件。右击工程文件夹弹出的菜单中选择AddNew。选择普通文件。点击Ok。文件名为maincpp点击Next进入下一步。这里自动将这个文件添加到了新建的工程中。保持默认设置点击完成。在maincpp文件中添加代码。这时点击运行程序执行了但看不到效果因为程序里什么也没做。我们点击信息框右上角的红色方块停止程序运行。我们再更改代码。添加一个对话框对象。运行效果如下。我们更改代码如下在对话框上添加一个标签对象并显示helloworld。运行效果如下。附:利用ui文件。建立新的空工程这里的工程名为hello建立好工程后添加新文件。这里添加QtDesignerForm。选择一个对话框做模板。你可以更改文件名我们这里使用默认设置。在新建好的框口上添加一个标签并更改文本为helloworld。在工程文件夹上点击右键弹出的菜单中选择第一项编译工程。因为还没有写主函数所以现在编译文件会出现错误不过没关系因为我们只是想编译一下ui文件。点击这个图标去掉弹出的菜单中第二项前的对勾显示隐藏的文件。这时你就能看到ui文件对应的头文件了。而如果去掉菜单中的第一项前的对勾列表中的文件就会分类显示如图ui文件对应的h文件默认为uidialogh(例如formui对应uiformh)。其中是设计器设计的窗口的对应代码。我们这里的h文件是最简单的其类名为UiDialog可以看到其中有我们添加的标签对象。在这个类里有一个setupUi函数我们就是利用这个函数来使用设计好的窗口的。我们添加maincpp文件并更改内容如下。其中ui>setupUi(dd)一句就是将设计的窗口应用到新建的窗口对象上。这时运行程序效果如下。在这篇文章中我们一共讲述了三种方法写helloworld程序其实也就是两种一种用设计器一种全部用代码生成其实他们是等效的。因为我们已经看到就算是设计器生成其实也是写了一个对应的uih文件只不过这个文件是自动生成的不用我们自己写而已。分类:Qt系列教程作者:yafeilinux日期:四月th,,viewsTags:creator,qt,yafeilinux,教程二、QtCreator编写多窗口程序本文章原创于wwwyafeilinuxcom转载请注明出处。实现功能:程序开始出现一个对话框按下按钮后便能进入主窗口如果直接关闭这个对话框便不能进入主窗口整个程序也将退出。当进入主窗口后我们按下按钮会弹出一个对话框无论如何关闭这个对话框都会回到主窗口。实现原理:程序里我们先建立一个主工程作为主界面然后再建立一个对话框类将其加入工程中然后在程序中调用自己新建的对话框类来实现多窗口。实现过程:首先新建QtGuiApplication工程工程名为nGuiBaseclass选为QWidget。建立好后工程文件列表如下图。新建对话框类如下图在新建中选择QtDesignerFormClass。选择DialogwithoutButtons。类名设为myDlg。点击Finish完成。注意这里已经默认将其加入到了我们刚建的工程中了。如下图在mydlgui中拖入一个PushButton将其上的文本改为“进入主窗口”在其属性窗口中将其objectName改为enterBtn在下面的Signalsandslotseditor中进行信号和槽的关联其中Sender设为enterBtnSignal设为clicked()Receive设为myDlgSlot设为accept()。这样就实现了单击这个按钮使这个对话框关闭并发出Accepted信号的功能。下面我们将利用这个信号。修改主函数maincpp如下:#include<QtGuiQApplication>#include“widgeth”#include“mydlgh”加入头文件intmain(intargc,char*argv){QApplicationa(argc,argv)WidgetwmyDlgmy建立自己新建的类的对象myif(myexec()==QDialog::Accepted)利用Accepted信号判断enterBtn是否被按下{wshow()如果被按下显示主窗口returnaexec()程序一直执行直到主窗口关闭}elsereturn如果没被按下则不会进入主窗口整个程序结束运行}主函数必须这么写才能完成所要的功能。如果主函数写成下面这样:#include<QtGuiQApplication>#include“widgeth”#include“mydlgh”intmain(intargc,char*argv){QApplicationa(argc,argv)myDlgmyif(myexec()==QDialog::Accepted){Widgetwwshow()}returnaexec()}这样因为w是在if语句里定义的所以当if语句执行完后它就无效了。这样导致的后果就是按下enterBtn后主界面窗口一闪就没了。如果此时对程序改动了再次点击运行时就会出现error:collect:ldreturnedexitstatus的错误。这是因为虽然主窗口没有显示但它只是隐藏了程序并没有结束而是在后台运行。所以这时改动程序再运行时便会出错。你可以按下调试栏上面的红色Stop停止按钮来停止程序运行。你也可以在windows任务管理器的进程中将该进程结束而后再次运行就没问题了当然先关闭QtCreator而后再重新打开这样也能解决问题。如果把程序改为这样:#include<QtGuiQApplication>#include“widgeth”#include“mydlgh”intmain(intargc,char*argv){QApplicationa(argc,argv)myDlgmyWidgetwif(myexec()==QDialog::Accepted){wshow()}returnaexec()}这样虽然解决了上面主窗口一闪而过的问题但是如果在my对话框出现的时候不点enterBtn而是直接关闭对话框那么此时整个程序应该结束执行但是事实是这样的吗?如果你此时对程序进行了改动再次按下run按钮你会发现又出现了error:collect:ldreturnedexitstatus的错误这说明程序并没有结束我们可以打开windows任务管理器可以看到我们的程序仍在执行。因为returnaexec()一句表示只要主窗口界面不退出那么程序就会一直执行。所以只有用第一种方法将该语句也放到if语句中而在else语句中用elsereturn这样如果enterBtn没有被按下那么程序就会结束执行了。到这里我们就实现了一个界面结束执行然后弹出另一个界面的程序。下面我们在主窗口上加一个按钮按下该按钮弹出一个对话框但这个对话框关闭不会使主窗口关闭。如下图在主窗口加入按钮显示文本为“弹出一个对话框”在其上点击鼠标右键在弹出的菜单中选择gotoslot。我们选择单击事件clicked()。我们在弹出的槽函数中添加一句:myshow()my为我们新建对话框类的另一个对象但是my我们还没有定义所以在widgeth文件中添加相应代码如下先加入头文件再加入my的定义语句这里我们将其放到private里因为一般的函数都放在public里而变量都放在private里。#ifndefWIDGETH#defineWIDGETH#include<QtGuiQWidget>#include“mydlgh”包含头文件namespaceUi{classWidget}classWidget:publicQWidget{QOBJECTpublic:Widget(QWidget*parent=)~Widget()private:Ui::Widget*uimyDlgmy对my进行定义privateslots:voidonpushButtonclicked()}#endifWIDGETH到这里再运行程序便能完成我们实验要求的功能了。整个程序里我们用两种方法实现了信号和槽函数的关联第一个按钮我们直接在设计器中实现其关联第二个按钮我们自己写了槽函数语句其实图形的设计与直接写代码效果是一样的。这个程序里我们实现了两类窗口打开的方式一个是自身消失而后打开另一个窗口一个是打开另一个窗口而自身不消失。可以看到他们实现的方法是不同的。分类:Qt系列教程作者:yafeilinux日期:四月th,,viewsTags:creator,qt,yafeilinux,教程三、QtCreator登录对话框本文章原创于wwwyafeilinuxcom转载请注明出处。实现功能:在弹出对话框中填写用户名和密码按下登录按钮如果用户名和密码均正确则进入主窗口如果有错则弹出警告对话框。实现原理:通过上节的多窗口原理实现由登录对话框进入主窗口而用户名和密码可以用if语句进行判断。实现过程:先新建QtGuiApplication工程工程名为mainWidget选用QWidget作为Baseclass这样便建立了主窗口。文件列表如下:然后新建一个QtDesignerFormClass类类名为loginDlg选用DialogwithoutButtons将其加入上面的工程中。文件列表如下:在logindlgui中设计下面的界面:行输入框为LineEdit。其中用户名后面的输入框在属性中设置其objectName为usrLineEdit密码后面的输入框为pwdLineEdit登录按钮为loginBtn退出按钮为exitBtn。将exitBtn的单击后效果设为退出程序关联如下:右击登录按钮选择gotoslot再选择clicked(),然后进入其单击事件的槽函数写入一句voidloginDlg::onloginBtnclicked(){accept()}改写maincpp:#include<QtGuiQApplication>#include“widgeth”#include“logindlgh”intmain(intargc,char*argv){QApplicationa(argc,argv)WidgetwloginDlgloginif(loginexec()==QDialog::Accepted){wshow()returnaexec()}elsereturn}这时执行程序可实现按下登录按钮进入主窗口按下退出按钮退出程序。添加用户名密码判断功能。将登陆按钮的槽函数改为:voidloginDlg::onloginBtnclicked(){if(mui>usrLineEdit>text()==tr(“qt”)mui>pwdLineEdit>text()==tr(“″))判断用户名和密码是否正确accept()else{QMessageBox::warning(this,tr(“Warning”),tr(“usernameorpassworderror!”),QMessageBox::Yes)如果不正确弹出警告对话框}}并在logindlgcpp中加入#include<QtGui>的头文件。如果不加这个头文件QMessageBox类不可用。(说明:由于版本原因现在的程序默认生成的ui类对象可能是ui而不是mui,请到loginDlgh中查看。)这时再执行程序输入用户名为qt密码为按登录按钮便能进入主窗口了如果输入错了就会弹出警告对话框。如果输入错误便会弹出警告提示框:在logindlgcpp的loginDlg类构造函数里添上初始化语句使密码显示为小黑点。loginDlg::loginDlg(QWidget*parent):QDialog(parent),mui(newUi::loginDlg){mui>setupUi(this)mui>pwdLineEdit>setEchoMode(QLineEdit::Password)}效果如下:如果输入如下图中的用户名在用户名前不小心加上了一些空格结果程序按错误的用户名对待了。我们可以更改if判断语句使这样的输入也算正确。voidloginDlg::onloginBtnclicked(){if(mui>usrLineEdit>text()trimmed()==tr(“qt”)mui>pwdLineEdit>text()==tr(“″))accept()else{QMessageBox::warning(this,tr(“Warning”),tr(“usernameorpassworderror!”),QMessageBox::Yes)}}加入的这个函数的作用就是移除字符串开头和结尾的空白字符。最后如果输入错误了重新回到登录对话框时我们希望可以使用户名和密码框清空并且光标自动跳转到用户名输入框最终的登录按钮的单击事件的槽函数如下:voidloginDlg::onloginBtnclicked(){if(mui>usrLineEdit>text()trimmed()==tr(“qt”)mui>pwdLineEdit>text()==tr(“″))判断用户名和密码是否正确accept()else{QMessageBox::warning(this,tr(“Warning”),tr(“usernameorpassworderror!”),QMessageBox::Yes)如果不正确弹出警告对话框mui>usrLineEdit>clear()清空用户名输入框mui>pwdLineEdit>clear()清空密码输入框mui>usrLineEdit>setFocus()将光标转到用户名输入框}}最终的loginDlgcpp文件如下图:分类:Qt系列教程作者:yafeilinux日期:四月th,,viewsTags:creator,qt,yafeilinux,教程四、QtCreator添加菜单图标本文章原创于wwwyafeilinuxcom转载请注明出处。在下面的几节我们讲述Qt的MainWindow主窗口部件。这一节只讲述怎样在其上的菜单栏里添加菜单和图标。新建QtGuiApplication工程将工程命名为MainWindow其他选项默认即可。生成的窗口界面如下图。其中最上面的为菜单栏。我们在TypeHere那里双击并输入“文件(F)”这样便可将其文件菜单的快捷键设为AltF。(注意括号最好用英文半角输入这样看着美观)输入完按下Enter键确认即可然后在子菜单中加入“新建(N)”确定后效果如下图。我们在下面的动作编辑窗口可以看到新加的“新建”菜单。双击这一条可打开它的编辑对话框。我们看到Icon项这里可以更改“新建”菜单的图标。我们点击后面的…号进入资源选择器但现在这里面是空的。所以下面我们需要给该工程添加外部资源。添加资源有两种方法。一种是直接添加系统提供的资源文件然后选择所需图标。另一种是自己写资源文件。我们主要介绍第一种。新建QtResourcesfile将它命名为menu。其他默认。添加完后如下图。可以看到添加的文件为menuqrc。我们最好先在工程文件夹里新建一个文件夹如images然后将需要的图标文件放到其中。在QtCreator的menuqrc文件中我们点击Add下拉框选择AddPrefix。我们可以将生成的newprefix前缀改为其他名字如File。然后再选择Add下拉框选择AddFiles。再弹出的对话框中我们到新建的images文件夹下将里面的图标文件全部添加过来。添加完成后我们在QtCreator的File菜单里选择SaveAll选项保存所做的更改。(注意:一定要先保存刚才的qrc文件不然在资源管理器中可能看不见自己添加的资源!)这时再打开资源选择器可以看到我们的图标都在这里了。(注意:如果不显示可以按一下上面的Reload按钮)我们将newpng作为“新建”菜单的图标然后点击Shortcut并按下CrtlN便能将CrtlN作为“新建”菜单的快捷键。这时打开文件菜单可以看到“新建”菜单已经有图标了。运行程序后效果如下。我们在工程文件夹下查看建立的menuqrc文件可以用写字板将它打开。其具体内容如下。附:第二种添加资源文件的方法。首先右击工程文件夹在弹出的菜单中选择AddNew添加新文件。也可以用File中的添加新文件。我们选择文本文件。将文件名设置为menuqrc。添加好文件后将其内容修改如下。可以看到就是用第一种方法生成的menuqrc文件的内容。保存文件后在资源管理器中可以看到添加的图标文件。五、QtCreator布局管理器的使用本文章原创于wwwyafeilinuxcom转载请注明出处。上篇讲解了如何在QtCreator中添加资源文件并且为菜单添加了图标。这次我们先对那个界面进行一些完善然后讲解一些布局管理器的知识。首先对菜单进行完善。我们在上一次的基础上再加入一些常用菜单。“文件”的子菜单如下图。中间的分割线可以点击AddSeparator添加。“编辑”子菜单的内容如下。“帮助”子菜单的内容如下。我们在动作编辑器中对各个菜单的属性进行设置。如下图。我们拖动“新建”菜单的图标将其放到工具栏里。拖动“新建”菜单的图标。将其放到菜单栏下面的工具栏里。我们再添加其他几个图标。使用AppendSeparator可以添加分割线。最终效果如下。如果需要删除图标可以在图标上点击右键选择Removeaction即可。下面简述一下布局管理器。(这里主要以垂直布局管理器进行讲解其他类型管理器用法与之相同其效果可自己验证。)在左边的器件栏里拖入三个PushButton和一个VerticalLayout(垂直布局管理器)到中心面板。如下图。将这三个按钮放入垂直布局管理器效果如下。可以看到按钮垂直方向排列并且宽度可以改变但高度没有改变。我们将布局管理器整体选中按下上面工具栏的BreakLayout按钮便可取消布局管理器。(我们当然也可以先将按钮移出再按下Delete键将布局管理器删除。)下面我们改用分裂器部件(QSplitter)。先将三个按钮同时选中再按下上面工具栏的LayOutVerticallyinSplitter(垂直分裂器)。效果如下图。可以看到按钮的大小可以随之改动。这也就是分裂器和布局管理器的分别。其实布局管理器不但能控制器件的布局还有个很重要的用途是它能使器件的大小随着窗口大小的改变而改变。我们先在主窗口的中心拖入一个文本编辑器TextEdit。这时直接运行程序效果如下。可以看到它的大小和位置不会随着窗口改变。下面我们选中主窗口部件然后在空白处点击鼠标右键选择Layout>LayOutinaGrid使整个主窗口的中心区处于网格布局管理器中。可以看到这时文本编辑器已经占据了整个主窗口的中心区。运行一下程序可以看到无论怎样拉伸窗口文本编辑框的大小都会随之改变。我们在这里一共讲述了三种使用布局管理器的方法一种是去器件栏添加一种是用工具栏的快捷图标还有一种是使用鼠标右键的选项。程序中用到的图标是我从Ubuntu中复制的可以到资源下载页面下载到。分类:Qt系列教程作者:yafeilinux日期:四月th,,viewsTags:creator,qt,yafeilinux,教程六、QtCreator实现文本编辑本文章原创于wwwyafeilinuxcom转载请注明出处。前面已经将界面做好了这里我们为其添加代码实现文本编辑的功能。首先实现新建文件文件保存和文件另存为的功能。(我们先将上次的工程文件夹进行备份然后再对其进行修改。在写较大的程序时经常对源文件进行备份是个很好的习惯。)在开始正式写程序之前我们先要考虑一下整个流程。因为我们要写记事本一样的软件所以最好先打开windows中的记事本进行一些简单的操作然后考虑怎样去实现这些功能。再者再强大的软件它的功能也是一个一个加上去的不要设想一下子写出所有的功能。我们这里先实现新建文件保存文件和文件另存为三个功能是因为它们联系很紧而且这三个功能总的代码量也不是很大。因为三个功能之间的关系并不复杂所以我们这里便不再画流程图而只是简单描述一下。新建文件那么如果有正在编辑的文件是否需要保存呢?如果需要进行保存那这个文件以前保存过吗?如果没有保存过就应该先将其另存为。下面开始按这些关系写程序。打开QtCreator在File菜单中选择Open然后在工程文件夹中打开MainWindowpro工程文件。先在maincpp文件中加入以下语句让程序中可以使用中文。在其中加入#include<QTextCodec>头文件包含再在主函数中加入下面一行:QTextCodec::setCodecForTr(QTextCodec::codecForLocale())这样在程序中使用中文便能在运行时显示出来了。更改后文件如下图。在mainwindowh文件中的private下加入以下语句。boolisSaved为true时标志文件已经保存为false时标志文件尚未保存QStringcurFile保存当前文件的文件名voiddofileNew()新建文件voiddofileSaveOrNot()修改过的文件是否保存voiddofileSave()保存文件voiddofileSaveAs()文件另存为boolsaveFile(constQStringfileName)存储文件这些是变量和函数的声明。其中isSaved变量起到标志的作用用它来标志文件是否被保存过。然后我们再在相应的源文件里进行这些函数的定义。在mainwindowcpp中先加入头文件#include<QtGui>然后在构造函数里添加以下几行代码。isSaved=false初始化文件为未保存过状态curFile=tr(“未命名txt”)初始化文件名为“未命名txt”setWindowTitle(curFile)初始化主窗口的标题这是对主窗口进行初始化。效果如下。然后添加“新建”操作的函数定义。voidMainWindow::dofileNew()实现新建文件的功能{dofileSaveOrNot()isSaved=falsecurFile=tr(“未命名txt”)setWindowTitle(curFile)ui>textEdit>clear()清空文本编辑器ui>textEdit>setVisible(true)文本编辑器可见}新建文件先要判断正在编辑的文件是否需要保存。然后将新建的文件标志为未保存过状态。再添加dofileSaveOrNot函数的定义。voidMainWindow::dofileSaveOrNot()弹出是否保存文件对话框{if(ui>textEdit>document()>isModified())如果文件被更改过弹出保存对话框{QMessageBoxboxboxsetWindowTitle(tr(“警告”))boxsetIcon(QMessageBox::Warning)boxsetText(curFiletr(”尚未保存是否保存?”))boxsetStandardButtons(QMessageBox::Yes|QMessageBox::No)if(boxexec()==QMessageBox::Yes)如果选择保存文件则执行保存操作dofileSave()}}这个函数实现弹出一个对话框询问是否保存正在编辑的文件。再添加“保存”操作的函数定义。voidMainWindow::dofileSave()保存文件{if(isSaved){如果文件已经被保存过直接保存文件saveFile(curFile)}else{dofileSaveAs()如果文件是第一次保存那么调用另存为}}对文件进行保存时先判断其是否已经被保存过如果没有被保存过就要先对其进行另存为操作。下面是“另存为”操作的函数定义。voidMainWindow::dofileSaveAs()文件另存为{QStringfileName=QFileDialog::getSaveFileName(this,tr(“另存为”),curFile)获得文件名if(!fileNameisEmpty())如果文件名不为空则保存文件内容{saveFile(fileName)}}这里弹出一个文件对话框显示文件另存为的路径。下面是实际文件存储操作的函数定义。boolMainWindow::saveFile(constQStringfileName)保存文件内容因为可能保存失败所以具有返回值来表明是否保存成功{QFilefile(fileName)if(!fileopen(QFile::WriteOnly|QFile::Text))以只写方式打开文件如果打开失败则弹出提示框并返回{QMessageBox::warning(this,tr(“保存文件”),tr(“无法保存文件:n″)arg(fileName)arg(fileerrorString()))returnfalse},表示后面的两个arg参数的值QTextStreamout(file)新建流对象指向选定的文件out<<ui>textEdit>toPlainText()将文本编辑器里的内容以纯文本的形式输出到流对象中isSaved=truecurFile=QFileInfo(fileName)canonicalFilePath()获得文件的标准路径setWindowTitle(curFile)将窗口名称改为现在窗口的路径returntrue}这个函数实现将文本文件进行存储。下面我们对其中的一些代码进行讲解。QFilefile(fileName)一句定义了一个QFile类的对象file其中filename表明这个文件就是我们保存的的文件。然后我们就可以用file代替这个文件来进行一些操作。Qt中文件的操作和CC很相似。对于QFile类对象怎么使用我们可以查看帮助。点击QtCreator最左侧的Help在其中输入QFile在搜索到的列表中选择QFile即可。这时在右侧会显示出QFile类中所有相关信息以及他们的用法和说明。我们往下拉会发现下面有关于怎么读取文件的示例代码。再往下便能看到用QTextStream类对象进行字符串输入的例子。下面也提到了QFileInfo和QDir等相关的类我们可以点击它们去看一下具体的使用说明。上面只是做了一个简单的说明。以后我们对自己不明白的类都可以去帮助里进行查找这也许是我们以后要做的最多的一件事了。对于其中的英文解释我们最好想办法弄明白它的大意其实网上也有一些中文的翻译但最好还是从一开始就尝试着看英文原版的帮助这样以后才不会对中文翻译产生依赖。我们这次只是很简单的说明了一下怎样使用帮助文件这不表明它不重要而是因为这里不可能将每个类的帮助都解释一遍没有那么多时间也没有那么大的篇幅。而更重要的是因为我们这个教程只是引你入门所以很多东西需要自己去尝试。在以后的教程里如果不是特殊情况就不会再对其中的类进行详细解释文章中的重点是对整个程序的描述其中不明白的类自己查看帮助。双击mainwindowui文件在图形界面窗口下面的ActionEditor动作编辑器里我们右击“新建”菜单一条选择Gotoslot然后选择triggered()进入其触发事件槽函数。同理进入其他两个菜单的槽函数将相应的操作的函数写入槽函数中。如下。voidMainWindow::onactionNewtriggered()信号和槽的关联{dofileNew()}voidMainWindow::onactionSavetriggered(){dofileSave()}voidMainWindow::onactionSaveAstriggered(){dofileSaveAs()}最终的mainwindowcpp文件如下。最终的mainwindowh文件如下。这时点击运行就能够实现新建文件保存文件文件另存为的功能了。然后实现打开关闭退出撤销复制剪切粘贴的功能。先备份上次的工程文件然后再将其打开。先在mainwindowh文件中加入函数的声明。void

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/49

Qt教程及软件(超级浅显易懂_非常适合初学者)

仅供在线阅读

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利