Qt学习笔记,还在更新中……_第1页
Qt学习笔记,还在更新中……_第2页
Qt学习笔记,还在更新中……_第3页
Qt学习笔记,还在更新中……_第4页
Qt学习笔记,还在更新中……_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、qt的学习之旅qt自定义的对话框qmessagebox类qmessagebox类提供了一个有一条简短消息、一个图标和一些按钮的对话框,可以向用户产生消息,警告,确认等对话框,只需要简单的应用就可以产生各种的样式,他提供了以下几种模式。qmessagebox:about,仅仅带有标题和简单文本的消息框,一般用于显示帮助提示信息.qmessagebox:information,具有主题和提示文本的提示消息框,可以根据情况定制按钮的个数,以及用法qmessagebox:question,具有标题和文本信息的咨询消息框,可以根据情况定制按钮的个数,以及用法qmessagebox:warning,具有标

2、题和文本信息的警告消息框,可以根据情况定制按钮的个数,以及用法qmessagebox:critical,具有标题和文本信息的致命错误消息框,可以定制按钮的个数,以及用法qmessagebox:aboutqt,显示广域qt的消息框,包括qt版本以及trolltech公司的产品信息等.代码非常的简单,另外还有一些成员函数可以来添加按钮,设置图标等等,下面看一下qmessagebox各种样式的简单例子。1.qmessagebox:aboutqmessagebox:about(null, about site, );/自动携带一个”ok”按钮。或者如下形式qmessagebox:about(this,

3、 about, this is a ligin dialog example.);2. qmessagebox:informationqmessagebox:information(this, suggest, the program installation is wrong, qmessagebox:retry| qmessagebox:ignore|qmessage:discard);/提示程序安装错误,有“重试”、“忽略”、“放弃”三个按钮提供选择。3.qmessagebox:questionqmessagebox:question(this, exit, installation i

4、s wrong,are you exiting?,qmessagebox:yes|qmessagebox:no);/询问是否退出安装程序4. qmessagebox:waringqmessagebox:waring(this,”waring”,”system is wrong”,qmessagebox:help|qmessagebox:ignore);/警告系统出错,是寻求帮助,还是忽略错误。5. qmessagebox:criticalqmessagebox:critical(this,”fatal error”,”system has fatal error!”qmessagebox:he

5、lp|qmessagebox:save,qmessagebox:close);/提示系统出现严重的错误,是寻求帮助、保存,还是关闭。6.qmessagebox:aboutqtqmessagebox:aboutqt(this,”about qt”);qmessagebox:standardbuttons的类型常量指descriptionqmessagebox:ok0x00000400定义ok按钮qmessagebox:open0x00002000定义open打开按钮qmessagebox:save0x00000800定义save保存按钮.qmessagebox:cancel0x00400000定

6、义cancel取消按钮qmessagebox:close0x00200000定义close关闭按钮.qmessagebox:discard0x00800000定义放弃或者不保存按钮.qmessagebox:apply0x02000000定义应用按钮.qmessagebox:reset0x04000000定义重置按钮.qmessagebox:restoredefaults0x08000000定义默认保存按钮.qmessagebox:help0x01000000定义帮助按钮.qmessagebox:saveall0x00001000定义保存所有按钮qmessagebox:yes0x00004000

7、定义yes按钮.qmessagebox:yestoall0x00008000对于所有都yes的按钮.qmessagebox:no0x00010000定义no按钮qmessagebox:notoall0x00020000定义不是对所有的按钮.qmessagebox:abort0x00040000定义中途终止按钮.qmessagebox:retry0x00080000定义重试按钮.qmessagebox:ignore0x00100000定义忽略按钮.qmessagebox:nobutton0x00000000定义成无效按钮对qmessagebox返回值进行处理qmessagebox提供的后四种消息

8、框都具有返回值,用户可以根据需求进行下一步处理。 qmessagebox box;box.setwindowtitle(tr(warning);box.seticon(qmessagebox:warning);box.settext(tr(installation is wrong,are you exited?);box.setstandardbuttons(qmessagebox:yes|qmessagebox:no);switch(box.exec()case qmessagebox:yes:qmessagebox:warning(this,yes,success,qmessagebox

9、:yes); break;case qmessagebox:no:qmessagebox:warning(this,no,failure,qmessagebox:no);break;default:qmessagebox:warning(this,retry,retry,qmessagebox:retry);usrlineedit-setfocus();qt中乱码的处理1.在有关汉字的处理中用到tr()函数;2.同时,在主函数中添加一个句子:qtextcodec:setcodecfortr(qtextcodec:codecforname(utf-8);(函数1)tr()是将字符串打包,经过函数

10、1将其解码并生成utf-8格式。大多数编译器生成的代码是utf-8格式的;但在编辑的时候可能用的是gb2312、gb18030等,所以在中间有个翻译转换的过程。其实,还有一个问题:在编写代码的时候,采用的编码格式会影响到代码在编辑器的显示。比如,在windows下编写完成了代码,在linux的kdevelop中打开,可能所有的汉字都是乱码。这是由于编辑器所支持的代码格式不一样。需要将其统一为现在编辑的代码格式最笨的方法就是手工的将其再改写一遍,但是有些麻烦。此问题即使在主程序中用了一段代码创建一个翻译器,也只能保证在运行之后显示的不是乱码,而在编写时显示的还是乱码,影响对代码的进一步修改。针对

11、这个问题,我们只需要知道所打开的文件是采用什么编码格式的,然后在kdevelop中设置,选择settings-configure editor-open/save选项,在打开的界面中将encoding设置和该文件相同的编码格式,然后,在主程序中添加:qtextcodec:setcodecfortr(qtextcodec:codecforname(该文件的编码格式);即可。tr()的作用编码方式 国际通用的unicode包括了所有的字符的编码,然后在不同的国家或是地区或是组织,有自己的编码,比如中国大陆有gb2312、台湾有big5、日本 有euc-jp等等,表示阿拉伯文的是iso 8895-6

12、等等。而因为unicode是国际通用的编码,几乎包括所有的字符,qt使用unicode编码,所以在qt中需要将unicode编码和其 他编码之前的转换。 qt中的国际化tr() qt中的tr是将指定的字符串翻译成本地语言。它是怎么实现的呢?经过阅读代码,其过程如下(下面是qt2的过程,qt4大致相同): 1)tr函数会直接调用到qapplication:translate()函数 2)在qapplication:translate()函数中,会找到根据所有的qtranslater对象来翻译指定的源字符串。在qt中,使用 lupdate和lrealse工具生成的翻译文件*.qm,每一个qm文件对

13、于一个qtranslater对象。所以这一步是在所有的*.qm文件中查 找。如果找到,则直接返回翻译的文本 3)当在*.qm中找不到该字符串的时候,再根据当前的文本编码模式将文本转换为unicode编码返回(当前的文本编码模式是qtextcodec的子类的对象) 4)如果在第3步中不能转换为有效的unicode值,那么直接返回在原来的字符串。说明:在qt2中,每一个application只有一个默认的文本编码方式,而在qt4中,有本地的编码方式,有翻译的编码方式。他们的作用是不同的。至于,利用一段长代码给应用程序创建翻译器(translator),暂时没有研究,本人认为还未用的上。呵呵qt的内

14、建(built-in)对话框为了便于程序员进行某些特定功能对话框的编程,qt提供了一套标准的对话框。这些对话框都提供了一些便于使用的静态函数。qcolordialog:能够允许用户选择颜色。qerrormessag:显示错误信息。qfiledialog:能够允许用户选择一个或者多个文件以及目录。qfontdialog:允许用户选择/设置字体。qinputdialog:允许用户进行简单的输入。qpagesetupdialog:配置与页相关的打印机选项。qprogressdialog:提示一个长时间操作的工作进程,以提示用户该操作是否已经停滞。qprintdialog:配置打印机。下边举个例子进行

15、说明/header file:builtindlg.h#ifndef _builtindlg_h_#define _builtindlg_h_#include /define three classesclass qtextedit;class qpushbutton;class cbuiltindlg : public qdialog q_objectpublic:cbuiltindlg(qwidget* = 0);virtual cbuiltindlg() private:qtextedit*displaytextedit;qpushbutton*colorpushbtn;qpushbut

16、ton*errorpushbtn;qpushbutton*filepushbtn;qpushbutton*fontpushbtn;qpushbutton*inputpushbtn;qpushbutton*pagepushbtn;qpushbutton*progresspushbtn;qpushbutton*printpushbtn;private slots:void dopushbtn();#endif/realize function:builtindlg.cpp/ chapter2/builtin/src/builtindlg.cpp.#include #include builtind

17、lg.hcbuiltindlg:cbuiltindlg(qwidget* parent) :qdialog(parent)displaytextedit = new qtextedit(tr(qt的标准通用对话框);qgridlayout* gridlayout = new qgridlayout;colorpushbtn = new qpushbutton(tr(颜色设置对话框);errorpushbtn = new qpushbutton(tr(错误设置对话框);filepushbtn = new qpushbutton(tr(文件对话框);fontpushbtn = new qpushb

18、utton(tr(字体对话框);inputpushbtn = new qpushbutton(tr(输入对话框);pagepushbtn = new qpushbutton(tr(页面设置对话框);progresspushbtn = new qpushbutton(tr(进度对话框);printpushbtn= new qpushbutton(tr(打印对话框);gridlayout-addwidget(colorpushbtn, 0, 0, 1, 1);/这四个数字分别代表:gridlayout-addwidget(errorpushbtn, 0, 1, 1, 1);/行、列、该对象框所占用

19、的行、列。gridlayout-addwidget(filepushbtn, 0, 2, 1, 1);gridlayout-addwidget(fontpushbtn, 1, 0, 1, 1);gridlayout-addwidget(inputpushbtn, 1, 1, 1, 1);gridlayout-addwidget(pagepushbtn, 1, 2, 1, 1);gridlayout-addwidget(progresspushbtn, 2, 0, 1, 1);gridlayout-addwidget(printpushbtn, 2, 1, 1, 1);gridlayout-ad

20、dwidget(displaytextedit, 3, 0, 3, 3);setlayout(gridlayout); connect(colorpushbtn, signal(clicked(), this, slot(dopushbtn(); connect(errorpushbtn, signal(clicked(), this, slot(dopushbtn();connect(filepushbtn, signal(clicked(), this, slot(dopushbtn(); connect(fontpushbtn, signal(clicked(), this, slot(

21、dopushbtn();connect(inputpushbtn, signal(clicked(), this, slot(dopushbtn(); connect(pagepushbtn, signal(clicked(), this, slot(dopushbtn();connect(progresspushbtn, signal(clicked(), this, slot(dopushbtn();connect(printpushbtn, signal(clicked(), this, slot(dopushbtn();setwindowtitle(tr(内建对话框);resize(4

22、00, 300);void cbuiltindlg:dopushbtn()/获取发送信号的qpushbutton对象的指针;函数qobject:sender()返回发送信号的对象的指针,返回类型为qobject* object)。模板函数:t qobject_cast(qobject* object)完成转换,将类型的对象指针转换为类型的对象的指针。 qpushbutton* btn = qobject_cast(sender();if(btn = colorpushbtn)/ 颜色消息框qpalette palette = displaytextedit-palette();/获取文本编辑器

23、的调色板/调用qcolordialog:getcolor()函数来创建并显示一个模态的颜色对话框,并返回用户选择的颜色对象的常量引用(对临时对象的引用是无效的,必须使用常量引用)赋给color变量。const qcolor& color= qcolordialog:getcolor(palette.color(qpalette:base), this);if(color.isvalid()palette.setcolor(qpalette:base, color);displaytextedit-setpalette(palette); else if(btn = errorpushbtn)/

24、 错误消息框.qerrormessage box(this);box.setwindowtitle(tr(错误消息框);box.showmessage(tr(错误消息框实例xx。);box.showmessage(tr(错误消息框实例xx。);box.showmessage(tr(错误消息框实例xx。);box.showmessage(tr(错误消息框实例yy。);box.showmessage(tr(错误消息框实例zz。);box.exec();else if(btn = filepushbtn)/ 文件对话框.qstring filename = qfiledialog:getopenfi

25、lename(this, tr(打开文件),/home/rock, tr(任何文件(*.*);文本文件(*.txt);xml文件(*.xml);/指定了多个过滤器,之间用;间隔。displaytextedit-settext(filename);else if(btn = fontpushbtn)/ 字体对话框.bool ok;/第一个参数ok是一个输出参数,用于标识用户的选择状态,如果用户单击“确定”按钮,该字体对话框将会/设置ok变量为true;而如果单击取消按钮,ok将会被设置为false;const qfont& font = qfontdialog:getfont(&ok,displ

26、aytextedit-font(),this,tr(字体对话框);if(ok)/ 如果确定设置字体.displaytextedit-setfont(font);else if(btn = inputpushbtn)/ 输入对话框.bool ok; qstring text = qinputdialog:gettext(this,tr(输入对话框), tr(输入文本),qlineedit:normal, qdir:home().dirname(),&ok);/默认返回home路径的名/字 if (ok & !text.isempty() displaytextedit-settext(text)

27、;else if(btn = pagepushbtn)/ 页面设置对话框.qprinter printer;qpagesetupdialog dlg(&printer, this);dlg.setwindowtitle(tr(页面设置对话框);if (dlg.exec() = qdialog:accepted)/ 进行下一步处理 else if(btn = progresspushbtn)/进度对话框.qprogressdialog progress(tr(正在复制文件.), tr(取消), 0, 10000, this);progress.setwindowmodality(qt:windo

28、wmodal);/设置为模态对话框progress.setwindowtitle(tr(进度对话框);progress.show();for (int i = 0; i processevents();if (progress.wascanceled()break;/. 复制文件处理qdebug() i;progress.setvalue(10000);else if(btn = printpushbtn)/ 打印对话框.qprinter printer;qprintdialog dlg(&printer, this);dlg.setwindowtitle(tr(打印对话框);if (dlg.

29、exec() = qdialog:accepted)/进行下一步处理 /main function:builtin.cpp#include /(1)#include builtindlg.h int main(int argc, char* argv) qapplication app(argc, argv); /(2)qtextcodec:setcodecfortr(qtextcodec:codecforname(utf-8); /(3) cbuiltindlg dlg; /(4)return dlg.exec(); /(5)主函数的解释其实,通过实例分析:一般应用程序的结构总是:(1)头文

30、件,builtindlg.h;(2)头文件的实现函数,builtindlg.cpp;(3)主函数。主函数一般都是固定的那些内容(如上边实例所示)。按照后边的注释数字来解释。(1)头文件,包含了qt用户界面头文件qtgui。qtgui头文件包含了qtcore模块和qtgui模块的所有qt类的定义。由于在类cbuiltindlg的实现文件builtlndlg.cpp中用到很多qtcore类和qtgui类,通过包含qtgui头文件,可以避免一 一包含所要使用的qt类头文件。(2)创建一个application对象并将用户在控制台输入的参数传递给该应用程序对象。(3)设置编码格式为utf8,国际统一编

31、码格式。(4)实例化cbuiltindlg类,创建一个对象句柄。(5)返回对象的运行结果。模态对话框和非模态对话框模态对话框就是指在子对话框弹出时,焦点被强行集中于该子对话框,子对话框不关闭,用户将无法操作其他的窗口。非模态相反,用户仍然可以操作其他的窗口,包括该子对话框的父对话框。如果从线程角度来讲,模态对话框实际上是线程阻塞的,也就是子对话框是一个线程,但是在创建这个子线程之后,父窗口就阻塞了;模态对话框则不是阻塞型的线程模型,父子线程可以并行运行。和所有流行的图形类库一样,qt也提供了创建模态和非模态对话框的机制。在qt中创建模态对话框,主要用到了qdialog的exec函数:sondi

32、alog dlg(this);int res = dlg.exec();if (res = qdialog:accepted)qmessagebox:information(this, tr(提示),tr(您单击了ok按钮!);if (res = qdialog:rejected)qmessagebox:information(this, tr(提示),tr(“您单击了cancel按钮!”);正如上面代码所显示的,可以通过exec函数的返回值来判断用户点击了哪个按钮使得模态对话框退出的,这可以使得我们能够根据用户的不同行为在推出退出模态对话框之后采取不同的处理方法。在qt中创建非模态对话框,主

33、要用到了qdialog的show函数:sondialog *dlg;dlg = new sondialog(this);dlg-show();由上面代码,细心的读者可能就会问了,既然new了,如果不delete,那么内存不就存在了泄露的问题了吗?确实如此!所以,我们希望该qt窗口在退出时自动能够delete掉自己,因此,我们在sondialog的构造函数里,添加这样的一句代码:setattribute (qt:wa_deleteonclose);这样,我们的sondialog就能够在它退出时自动的delete掉自己了,不会再造成内存泄漏问题。qt-designer设计器将设计的窗口界面导入应用程序中利用qt中的设计器进行界面开发效率较高。而且简单易学。在qt-designer中设计好了界面之后,处理过程如下:(1)设计完成后,保存后是一个“*.ui”文件。(2)在终端输入一下命令:uic -o ui_*.h *.ui或者uic *.ui(后者直接输出到控制台)。这一步是利用qt提供的qmake工具和uic编译工具将生成的*.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论