Qt学习笔记2

合集下载

QT学习笔记2:QT中常用函数

QT学习笔记2:QT中常用函数

QT学习笔记2:QT中常⽤函数⼀、QString转numberQString number(long n, int base = 10)QString number(ulong n, int base = 10)QString number(int n, int base = 10)QString number(uint n, int base = 10)QString number(qlonglong n, int base = 10)QString number(qulonglong n, int base = 10)QString number(double n, char format = 'g', int precision = 6)整形的转换格式都是⼀样的,第⼀个参数是⼗进制要转换的整数,第⼆个参数指定以什么进制来转换,默认是⼗进制,⽐如:QString strNumDec = QString::number(55, 10); //转化成10进制QString strNumHex = QString::number(55, 16); //16进制QString strNumBit = QString::number(55, 2); //2进制第⼆个参数base必须在[2,36]之间,当base为10以外的值时,第⼀个参数n将被视为⽆符号整数。

⼆、number 转 QStringdouble toDouble(bool * ok = 0) constfloat toFloat(bool * ok = 0) constint toInt(bool * ok = 0, int base = 10) constlong toLong(bool * ok = 0, int base = 10) constqlonglong toLongLong(bool * ok = 0, int base = 10) constshort toShort(bool * ok = 0, int base = 10) constQString也提供了⼀系列转换成数值的函数,参数ok指⽰转换是否出错,参数base指⽰当前QString是什么进制,如QString str = "55";bool ok;int numBit = str.toInt(&ok, 2);int numOct = str.toInt(&ok, 8);int numDec = str.toInt(&ok, 10);int numHex = str.toInt(&ok, 16);三、QPixmap加载图⽚并获取图⽚宽和⾼void Dialog::paintEvent(QPaintEvent *){QPainter painter(this);QPixmap pix;//加载图⽚pix.load("D:\\1001.jpg");//获得图⽚的宽和⾼qreal width = pix.width();qreal height = pix.height();//图⽚放⼤两倍pix = pix.scaled(width*2,height*2,Qt::KeepAspectRatio);painter.drawPixmap(0,0,100,100,pix);}四、QString与String转换//QString转换Stringstring s = qstr.toStdString();//String转换QStringQString qstr2 = QString::fromStdString(s);这样虽然能成功,但是会出现中⽂乱码情况。

qt学习笔记

qt学习笔记

汇文教育;‎QFi‎l eInf‎o类1、‎q file‎i nfo提‎供有关文件‎系统中的,‎文件的名称‎和位置信息‎(路径),‎它的访问权‎限,以及它‎是否是一个‎目录或符号‎链接,该‎文件的大小‎和最后修改‎/读取时间‎也可用。

‎2、QFi‎l eInF‎o可以指‎向一个文件‎,一个相对‎或一个绝对‎文件路径,‎绝对文件路‎径开始与目‎录分隔符“‎/”或驱动‎器的规格(‎除了在UN‎I X),‎相对文件‎名开始有一‎个目录名或‎一个文件名‎,并指定一‎个相对于当‎前工作目录‎的路径.一‎个绝对路径‎的一个例子‎是一个字符‎串“/tm‎p /qu‎a ltz”‎,相对路径‎可能看起‎来像“sr‎c / f‎a tlib‎”,你可以‎使用这个函‎数isre‎l ativ‎e()来检‎查 qfi‎l einf‎o是否使‎用相对或绝‎对路径的文‎件,你可以‎调用函数c‎o nver‎t toab‎s()转‎换 qfi‎l einf‎o的相对‎路径为绝对‎路径。

这‎q file‎i nfo文‎件在构造函‎数中设置或‎后setf‎i le()‎,使用ex‎i sts(‎)看文件是‎否存在,s‎i ze()‎得到它的大‎小。

加‎速性能,q‎f ilei‎n fo缓存‎文件有关的‎信息,因为‎文件可以被‎其他用户或‎程序更改,‎甚至由同一‎程序的其他‎部分,这个‎函数ref‎r esh(‎),刷新文‎件信息,‎如果你想关‎闭一个qf‎i lein‎f o的缓存‎和强制访问‎文件系统每‎次请求信息‎,你可以调‎用setC‎a chin‎g(FAL‎S E).‎文件的类型‎是获得通过‎i sfil‎e(),i‎s dir(‎)和isS‎y mlin‎k()该‎文件的日期‎由 cre‎a ted(‎), la‎s tMod‎i fied‎() an‎d las‎t Read‎(),文件‎的访问权限‎由isR‎e adab‎l e(),‎isWr‎i tabl‎e() a‎n d is‎E xecu‎t able‎()获得。

Qt学习资料

Qt学习资料

Qt学习资料1. 介绍QML是一种描述语言,主要是对界面效果等的一种描述,它可以结合javaScript来进行更复杂的效果及逻辑实现。

比如做个游戏,实现一些更有趣的功能等2. 简单的例子import Qt4.7Rectangle{width:200height:200color:"blue"}代码是绘制一个蓝色的矩形,宽200 高200,import包含一个qt4.7的包3.基本元素的介绍(自己翻译意思会有出入,敬请见谅)基本可视化项Item 基本的项元素在QML中所有可视化的向都继承他Rectangle 基本的可视化矩形元素Gradient 定义一个两种颜色的渐变过程GradientStop 定义个颜色,被Gradient使用Image 在场景中使用位图BorderImage(特殊的项) 定义一张图片并当做边界AnimatedImage 为播放动画存储一系列的帧Text 在场景中使用文本TextInput 显示可编辑为文本IntValidator int 验证器DoubleValidator double 验证器RegExpValidator 验证字符串正则表达式TextEdit 显示多行可编辑文本基本的交互项MouseArea 鼠标句柄交互FocusScope 键盘焦点句柄Flickable 提供一种浏览整张图片的一部分的效果,具体看例子Flipable 提供一个平面,可以进行翻转看他的前面或后面,具体看例子状态State 定义一个配置对象和属性的集合PropertyChanges 使用一个State描述属性的改变StateGroup 包含一个状态集合和状态变换ParentChange 重新定义父集,也就是换个父节点AnchorChanges 在一个状态中改变anchors动画和变换Behavior 默认的属性变换动画SequentialAnimation 对定义的动画串行播放ParallelAnimation 对定义的动画并行播放PropertyAnimation 属性变换动画NumberAnimation 对实数类型属性进行的动画Vector3dAnimation 对QVector3d进行的属性ColorAnimation 颜色进行的变换动画RotationAnimation 对旋转进行的变换动画ParentAnimation 对父节点进行变换的动画,改变绑定的父节点AnchorAnimation 对anchor 进行改变的动画PauseAnimation 延迟处理SmoothedAnimation 允许属性平滑的过度SpringAnimation 一种加速的效果PropertyAction 允许在动画过程中对属性的直接改变ScriptAction 允许动画过程中调用脚本Transition 在状态变换中加入动作变化工作中的数据Binding 在创建的时候绑定一些数据到一些属性ListModel 定义链表数据ListElement 定义ListModel的一个数据项VisualItemModel 包含可视化项(visual items)到一个view中,相当是一个容器VisualDataModel 包含一个model和一个delegate,model包含需要的数据,delegate设计显示的项的信息,具体的去看例子Package 他的目的是把VisualDataModel共享给多个view,具体还要学习XmlListModel 特殊的一个模式使用XPath表达式,使用xml来设置元素,参考例子XmlRole XmlListModel的一个特殊的角色视图ListView 提供一个链表显示模型视图GridView 提供一个网格显示模型视图PathView 提供一个内容沿着路径来显示的模型Path 定义一个PathView使用的轨迹PathLine 定义一个线性的轨迹PathQuad 定义一个二次贝塞尔曲线的轨迹PathCubic 定义一个三次贝塞尔曲线的轨迹PathAttribute允许绑定一个属性上,具体看例子PathPercent 修改item分配的轨迹不是很明了其中的意思WebView 允许添加网页内容到一个canvas上定位器Column 整理它的子列(纵)Row 整理它的子行(横)Grid 设置它的子到一个网格上Flow 目的是不让他的子项重叠在一起实用Connections 明确连接信号和信号句柄Component 封装QML items 想一个组件一样Timer 提供时间触发器QtObject 基本的元素只包含objectName属性Qt qml全局Qt object提供使用的枚举和函数WorkerScript允许在QML使用线程Loader 控制载入item或组件Repeater 使用一个模型创建多个组件SystemPalette 为Qt palettes提供一个通道FontLoader 载入字体根据名字或URLLayoutItem 允许声明UI元素插入到qtGraphicsView 布局中变换Scale 分派item 缩放行为Rotation 分派item 旋转行为Translate 分派item 移动行为4.基本元素的使用例子1. Item位置是0,0 宽高分别是200Item{x:0;y:0;width:200;height:200;}2. Rectangle位置是:0,0宽高分别是200,颜色是红色Rectangle{x: 0; y: 0;width: 200; height: 200;color: "red"}3.Gradient GradientStop分别在总高度的0 颜色红色总高度的1/3 黄色总高度的1是绿色Rectangle{width:100;height:100gradient:Gradient{GradientStop{position:0.0;color:"red"}GradientStop{position:0.33;color:"yellow"}GradientStop{position:1.0;color:"green"}}}4.Image设置一张图片Image{source:"../Images/button1.png"}5.BorderImage他将一张图片分成9部分当图片进行缩放的时候A.1 3 7 9 位置的都不会进行缩放B. 2 8将根据属性horzontalTileMode 进行缩放C.4 6 将根据属性verticalTileMode 进行缩放D.5 将根据属性horzontalTileMode 和verticalTileMode 进行缩放BorderImage{width:180;height:180//分割1~9块的4个点是根据border设置的坐标来实现的//本别是距离坐标上边右边下边的距离border{left:30;top:30;right:30;bottom:30}horizontalTileMode:BorderImage.StretchverticalTileMode:BorderImage.Stretchsource:"../Images/button1.png"}6.AnimatedImage主要用于播放gif图片Rectangle{width:animation.width;height:animation.height+8AnimatedImage{id:animation;source:"animation.gif"}Rectangle{property int frames:animation.frameCountwidth:4;height:8x:(animation.width-width)*animation.currentFrame/frames y:animation.heightcolor:"red"}}7.Text显示文本(具体的其他设置请看文档)Text{text:"text"}8.TextInput下面是设置一个输入文本框,框中的字符串是Text, 并设置鼠标可以选择文本TextInput{text:"Text"selectByMouse:true;//鼠标可以选择}9.IntValidator int 型验证器,和输入框结合后就是只能输入整型数据T extInput{//最高可以输入100,最低输入10IntValidator{id:intval;bottom:10;top:100;}width:100;height:20;text:"";//使用校验器validator:intval;}10.DoubleValidator只能输入浮点数TextInput{//最高可以输入100,最低输入10decimals最多有多少位小数//notation表示是使用科学计数法还是(默认),还是直接的小数当获取里面的数据DoubleValidator{id:intval;decimals:4;bottom:10;top:100;nota tion:DoubleValidator.StandardNotation}width:100;height:20;text:"";//使用校验器validator:intval;}11.RegExpValidator使用正则表达式TextInput{//使用一个正则表达式来控制输入的字符串///^[a-zA-Z]{1}[0-1]{0,2}[a-z]{1,3}$/表示开始位置必须是一个大写或小写字母//接下来是0~2个的数字而且是0或1,在接下来是1~3个的小写字母RegExpValidator{id:intval;regExp:/^[a-zA-Z]{1}[0-1]{0,2}[a-z]{1,3}$/;}width:100;height:20;text:"";//使用校验器validator:intval;}12.TextEdit显示一段hello world的html文本和TextInput相同TextEdit{width:240text:"Hello World!"font.family:"Helvetica"font.pointSize:20color:"blue"focus:true}13.MouseArea主要是用来判断鼠标事件的区域Rectangle{x:0;y:0;width:100;height:100;Rectangle{id:mousrectx:20;y:20;width:20;height:20;color:"blue"MouseArea{//使用父的区域作为鼠标判断的区域及x:20;y:20;width:20;height: 20;anchors.fill:parent;//但鼠标按下后mousrect变成红色,当鼠标松开后变成蓝色onPressed:{mousrect.color="red";}onReleased:{mousrect.color="blue";}}}}14.FocusScope不是很清楚说的什么,好像是说同一个时刻只有一个item有焦点15.Flickable显示一个200x200的框,框中显示图片上200x200的部分Flickable{width:200;height:200//设置使用图片的宽高,而现实的是200x200的现实框contentWidth:image.width;contentHeight:image.heightImage{id:image;source:"../Images/need.png"}}16.Flipable包含两个面,一个前面,一个后面,实现一个控件前后的翻转效果,并且在后面可以添加一些控制Flipable{id:flipablewidth:240height:240property int angle:0property bool flipped:falsefront:Image{source:"front.png"}//前面back:Image{source:"back.png"}//后面//旋转动画前后面交换transform:Rotation{origin.x:flipable.width/2;origin.y:flipable.height/2axis.x:0;axis.y:1;axis.z:0//rotate around y-axisangle:flipable.angle}states:State{name:"back"PropertyChanges{target:flipable;angle:180}when:flipable.flipped}transitions:Transition{NumberAnimation{properties:"angle";duration:1000}}MouseArea{anchors.fill:parentonClicked:flipable.flipped=!flipable.flipped}}17.State//当鼠标按下后改变myRect的颜色Rectangle{id:myRectwidth:100;height:100color:"black"MouseArea{id:mouseAreaanchors.fill:parentonClicked:myRect.state=='clicked'?myRect.state="":myRect. state= 'clicked';}//设置状态states:[State{name:"clicked"PropertyChanges{target:myRect;color:"red"}}]}18.PropertyChanges//当鼠标按下后改变状态//状态里面的属性改变包含了文本和颜色的改变Text{id:myTextwidth:100;height:100text:"Hello"color:"blue"states:State{name:"myState"//当这个状态被设置的时候,将改变myText的文本和颜色PropertyChanges{target:myTexttext:"Goodbye"color:"red"}}MouseArea{anchors.fill:parent;onClicked:myText.state='myS tate'} }19.StateGroup一个状态组中可以包含很多的状态和变化,而状态也可以和变换绑定. 20.StateChangeScript在状态中可以对脚本中的函数进行调用// Sc.jsfunction changeColor() // 返回蓝色{return "blue";}// test.qmlimport"Sc.js"as CodeRectangle{id:rectwidth:50;height:50color:"red"MouseArea{anchors.fill:parentonClicked:rect.state="first" // 鼠标按下改变状态}states:State{name:"first"; StateChangeScript{name:"myScript";script:rect.color=Code.changeColor();}}}21.ParentChang把指定的item换一个item父节点Item{width:200;height:100Rectangle{id:redRectwidth:100;height:100color:"red"}//本来blueRect的父节点是Item当鼠标按下后他被设置到redRect上Rectangle{id:blueRectx:redRect.widthwidth:50;height:50color:"blue"states:State{name:"reparented"//改变父节点ParentChange{target:blueRect;parent:redRect;x:10;y:10}}MouseArea{anchors.fill:parent;onClicked:blueRect.state="re parented"} }}22.AnchorChangesRectangle{id:windowwidth:120;height:120color:"black"Rectangle{id:myRect;width:50;height:50;color:"red"}states:State{name:"reanchored"AnchorChanges{//改变myRect的anchors属性target:myRectanchors.top:window.topanchors.bottom:window.bottom}PropertyChanges{target:myRectanchors.topMargin:10anchors.bottomMargin:10}}//鼠标事件MouseArea{anchors.fill:parent;onClicked:window.state="rea nchored"} }23.BehaviorRectangle{id:rectwidth:100;height:100color:"red"//针对宽度的动画Behavior on width{NumberAnimation{duration:1000}}MouseArea{anchors.fill:parentonClicked:rect.width=50}}24.SequentialAnimation串行播放多个动画Rectangle{id:rect1width:500;height:500Rectangle{id:rect;color:"red"width:100;height:100//串行播放多个动画,先横向移动,在纵向移动SequentialAnimation{running:true;NumberAnimation{target:rect;properties:"x";to:50;duration: 1000}NumberAnimation{target:rect;properties:"y";to:50;duration:1000 } }}}25.ParallelAnimationRectangle{id:rect1width:500;height:500Rectangle{id:rect;color:"red"width:100;height:100//并行播放动画,同时横向和纵向移动ParallelAnimation{running:true;NumberAnimation{target:rect;properties:"x";to:50;duration: 1000}NumberAnimation{target:rect;properties:"y";to:50;duration:1000 } }}}26.PropertyAnimationRectangle{id:rectwidth:100;height:100color:"red"。

QT知识点

QT知识点

QT知识点1、QPallete调色板类QPallete提供了颜色角色(color roles)概念,是指当前GUI界面中颜色的职责,通过枚举变量QPalette::ColorRole来定义,比较常用的颜色角色有:QPalete::Window,通常指窗口部件的背景色;QPalette:WindowT ext,通常指窗口不见的前景色;QPalette::Base,指文本输入窗口部件(比如QtextEdit,QLinedit等)的背景色.QPalette::Text,与QPalette::Base一块使用,指文本输入窗口部件的前景色;QPalette::Button,指按钮窗口部件的背景色;QPalette::ButtonText,指按钮窗口部件的前景色.setPalette( QPalette( QColor( 250, 250, 200) ) );QColor( 250, 250, 200)会生成一个QColor对象作为QPalette构造参数,于是又生成一个QPalette对象作为setPalette的参数.QColor( 250, 250, 200)是实例化对象,编译器会自动调用构造函数,而”C++中是不允许直接调用构造函数的”是指一个类不能调用其构造函数;比如:QColor color(250, 250, 200);这时也调用了构造函数,是对的,但color.QColor(250,250,200)就错了.2、QtCreator 断点所谓断点,就是程序开发者设定的一系列条件,但程序以调试方式运行时,一旦符合引发断点的条件,程序便中断执行,程序员便可检视程序运行时的状态,继而控制程序的运行,直至找出问题的所在。

设置断点的规则:在某一行代码设置断点--在行号左边缘点击鼠标或按下F9;在断点视图中选择某个断点,按下Delete键;在断点视图内点击鼠标右键,在弹出的上下文窗口中选择【Delete Breakpoint】Shift + F5 结束调试状态;F10 进入逐行调试状态。

QT学习笔记widgetMainWindow和Dialog的选择使用

QT学习笔记widgetMainWindow和Dialog的选择使用

Qt中的每‎个类,都有一个对‎应的同名头‎文件,其中包含其‎类定义。

例如要使用‎Q Appl‎i cati‎o n类,则需要在程‎序中添加" #inclu‎d e <QAppl‎i cati‎o n>"QAppl‎i cati‎o n类用于‎管理应用程‎序范围内的‎资源。

其构造函数‎需要mai‎n函数的a‎r gc和a‎r gv作为‎参数。

widge‎t被创建时‎都是不可见‎的(alway‎s creat‎e d hidde‎n)。

widge‎t中可容纳‎其它wid‎g et。

Qt中的w‎i dget‎在有用户行‎为或状态改‎变时会em‎i t signa‎l。

signa‎l可以和s‎l ot函数‎连接在一起‎(conne‎c t),这样当有s‎i gnal‎被emit‎时,对应的sl‎o t函数会‎被自动调用‎。

QWidg‎e t类的构‎造函数需要‎一个 QWidg‎e t * 指针作为参‎数,表示其pa‎r ent widge‎t(默认值为0‎,即不存在p‎a rent‎widge‎t)。

在pare‎n t widge‎t被删除时‎,Qt会自动‎删除其所有‎的chil‎d widge‎t。

Qt中有三‎种Layo‎u t Manag‎e r 类: QHBox‎L ayou‎t,QVBox‎L ayOu‎t,QGrid‎L ayOu‎t。

基本模式是‎将widg‎e t添加进‎L ayOu‎t,由Layo‎u t自动接‎管widg‎e t的尺寸‎和位置。

启动Qt程‎序时可以通‎过 -style‎参数改变程‎序的默认显‎式风格。

Chapt‎e r 2 Creat‎i ng Dialo‎g s2.1 Subcl‎a ssin‎g Dialo‎gQt中所有‎d ialo‎g的基类是‎Q Dial‎o g。

QDial‎o g派生自‎Q Widg‎e t。

Qt中所有‎定义了si‎g nal或‎s lot的‎类,在其类定义‎的开始处都‎要使用Q_‎O BJEC‎T宏。

QT知识点总结

QT知识点总结

QT知识点总结QT(即Qt宽平台应用程序开发框架)是一款跨平台的C++应用程序开发框架,被广泛应用于图形用户界面(GUI)应用程序开发。

下面是对QT知识点的总结:1.QT基础:-QT的基本概念:信号和槽机制、对象树结构、事件处理等。

- QT的核心类库:QObject、QWidget、QApplication、QMainWindow、QDialog等。

2.QT的窗口与布局:- QT的窗口与绘图设备:QWidget、QMainWindow、QDialog等。

- QT的布局管理器:QLayout、QHBoxLayout、QVBoxLayout、QGridLayout等。

3.QT的信号与槽机制:-信号与槽的概念及作用。

-定义和使用信号与槽。

-信号与槽的连接:直接连接、自动连接、带参数的连接等。

-信号与槽的线程安全性。

4.QT的事件处理:-事件的基本概念:事件循环、事件分发等。

-事件类型的识别与处理。

-自定义事件的添加与处理。

5.QT的绘图与绘图设备:- QT的绘图设备:QPainter、QPixmap、QImage等。

-绘图基础:坐标系统、画笔与画刷、颜色、字体等。

-绘图操作:画线、画矩形、画圆、绘制图像等。

6.QT的文件与数据处理:- 文件的读写与处理:QFile、QTextStream、QDataStream等。

- XML文件的读写与处理:QDomDocument、QXmlStreamReader等。

- JSON文件的读写与处理:QJsonDocument、QJsonArray等。

- 数据库的访问与处理:QSqlDatabase、QSqlQuery等。

7.QT的网络编程:- TCP与UDP的网络通信:QTcpSocket、QUdpSocket等。

- HTTP协议的网络通信:QNetworkAccessManager等。

- WebSocket的网络通信:QWebSocket等。

-服务器与客户端的开发。

Kinect+OpenNI学习笔记之2(获取kinect的颜色图像和深度图像)

Kinect+OpenNI学习笔记之2(获取kinect的颜色图像和深度图像)

Kinect+OpenNI学习笔记之2(获取kinect的颜色图像和深度图像)前言网上有不少使用Qt做界面,OpenNI为库来开发kinect。

或许大家的第一个问题就是询问该怎样使用Kinect来获取颜色信息图和深度信息图呢?这一节就是简单来回答这个问题的。

开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2实验说明:在使用OpenNI来驱动读取kinect数据时,我们需要了解context object这个名词。

查看了下OpenNI UserGuide文档,简单翻译下这个名词的意思:Context是openNI中一个主要的object,它掌握了OpenNI使用过程中应用程序的全部状态,以及这些状态的prodection chains,一个应用程序有多个context,但是这些context之间不能共享信息。

例如一个中间件节点不能使用另一个context的驱动节点。

Context在使用前必须被立即初始化,因此此时所有嵌入的模块被下载和分析。

为了释放context的内存,应用程序需调用shutdown程序。

虽然翻译得不准确,但是它的大概意思就是告诉我们在驱动kinect时,需要用到context这个类,且我们需要安装一定顺序去使用,这与一些常见的库驱动差不多,比如opengl,这些都需要什么初始化啊,设置属性啊等。

因此我们只需要直接去看懂他人的一个工程实例就ok了。

好了,本文参考Heresy的教程中的源码写的。

在新建好工程文件后,需要包含XnCppWrapper头文件,且需在Qt工程中设置好头文件目录和库文件目录。

使用OpenNI读取颜色图和深度图的步骤如下(这个是程序的核心部分):1. 定义一个Context对象,并调用该对象的Init()方法来进行初始化。

2. 定义一个XnMapOutputMode格式对象,设置好分图像分辨率和帧率。

3. 定义颜色图和深度图的节点对象,并用其Create()方法来创建,参数为Context对象.4. 设置颜色和深度图的输出模式,调用的方法是SetMapOutputMode();参数为步骤2中定义和设置好了的XnMapOutputMode对象。

qt 基础知识梳理

qt 基础知识梳理

qt 基础知识梳理QT基础知识梳理QT是一种跨平台的C++应用程序开发框架,通过QT,开发者可以方便地编写可在不同操作系统上运行的应用程序。

本文将梳理一些QT的基础知识,帮助读者了解QT的核心概念和常用功能。

一、QT概述QT是由挪威的Trolltech公司开发的一种C++应用程序开发框架,其目标是提供一种简单、易用、跨平台的开发环境。

QT采用了一种特殊的信号与槽机制,使得开发者可以方便地处理对象之间的事件和通信。

QT还提供了丰富的图形界面控件和工具类,以及强大的跨平台支持,使得开发者可以快速地开发出高质量的应用程序。

二、QT的核心概念1. 对象和类:在QT中,所有的组件都是对象,对象是类的实例。

类定义了对象的属性和行为,开发者可以通过继承和多态等方式来扩展和定制类的功能。

2. 信号与槽机制:信号与槽是QT的核心机制,它通过一种松耦合的方式实现了对象之间的通信。

一个对象可以发送信号,而其他对象可以接收这个信号并作出相应的反应。

开发者可以通过connect 函数将信号和槽函数连接起来,实现对象之间的交互。

3. 事件驱动编程:QT采用了事件驱动的编程方式,当用户执行某个操作时,系统会生成相应的事件,然后QT会将事件发送给相关的对象,对象再根据事件的类型和参数来执行相应的操作。

4. 常用的QT类:QT提供了丰富的类库,包括图形界面控件、文件操作、网络通信、数据库访问等功能。

常用的类有QWidget、QLabel、QPushButton、QLineEdit、QSpinBox等,开发者可以根据自己的需求选择合适的类来构建界面和实现功能。

三、QT的常用功能1. 图形界面开发:QT提供了丰富的图形界面控件和布局管理器,开发者可以通过拖拽和设置属性的方式来构建界面。

同时,QT还提供了强大的绘图和动画功能,可以实现各种复杂的图形效果。

2. 事件处理:QT中的事件可以分为系统事件和自定义事件。

系统事件包括鼠标点击、键盘输入等用户操作,开发者可以通过重写事件处理函数来响应这些事件。

Qt入门教程详细讲解版

Qt入门教程详细讲解版

Qt入门教程详细讲解版Qt是一款跨平台的图形用户界面开发框架,其使用C++语言编写,提供了丰富的类库和功能,可以用于开发各种类型的桌面应用程序。

本篇文章将详细讲解Qt的入门教程,帮助读者快速上手Qt的开发。

1.安装Qt2.创建项目打开Qt Creator,点击"新建项目",选择"Qt Widgets Application",然后点击"选择"按钮。

在"项目名称"输入框中,输入项目的名称,并选择项目的保存路径。

点击"下一步"。

3.设计界面在"类名"输入框中,输入主窗口类的名称,默认为"MainWindow"。

点击"下一步"。

4.编写代码5.运行程序在Qt Creator的工具栏中,点击运行按钮,或者按下F5键,即可编译和运行我们的代码。

此时,会自动弹出一个窗口,显示我们的应用程序界面。

6.添加控件7.设置布局8.添加信号槽9.编写业务逻辑除了界面和控件,我们还可以编写各种业务逻辑来实现应用程序的功能。

例如,可以添加一些槽函数来处理按钮的点击事件,或者编写一些函数来处理数据的读取和处理等等。

10.编译和部署当我们完成了应用程序的开发后,可以点击Qt Creator的构建按钮,或者按下Ctrl+B键来编译我们的代码。

编译成功后,可以点击构建菜单中的部署按钮,将我们的应用程序打包和部署到指定的目录中。

总结:本篇文章详细讲解了Qt的入门教程,包括安装Qt开发工具、创建项目、设计界面、编写代码、运行程序、添加控件、设置布局、添加信号槽、编写业务逻辑以及编译和部署等。

希望读者通过本文的学习,能够快速上手Qt的开发,并能够使用Qt来开发自己的应用程序。

qt实验总结

qt实验总结

qt实验总结一、实验目的本次实验的主要目的是学习和掌握QT编程语言的基础知识和应用技能,包括QT框架的搭建、界面设计、信号与槽机制、文件操作等方面。

二、实验内容1. QT框架的搭建:在安装好QT开发环境后,需要进行项目配置和环境设置,以确保能够正常进行编译和运行。

2. 界面设计:使用QT提供的UI设计器工具,可以方便地进行界面设计和布局。

通过拖拽控件、设置属性等方式,可以快速地创建各种功能丰富的界面。

3. 信号与槽机制:QT中采用信号与槽机制来实现组件之间的通信和交互。

通过连接信号和槽函数,可以实现各种操作和功能。

4. 文件操作:QT提供了丰富的文件操作API,包括读取、写入、复制、删除等功能。

通过学习这些API,可以方便地进行文件处理。

三、实验过程1. QT框架的搭建:首先需要在QT Creator中创建一个新项目,并选择合适的项目类型(如控制台应用程序或窗口应用程序)。

然后进行项目配置,设置编译器选项、构建目录等信息。

最后进行环境设置,包括QT版本、编译器版本等。

2. 界面设计:使用QT提供的UI设计器工具,可以方便地创建各种控件和布局。

首先需要选择合适的布局方式(如水平布局或网格布局),然后拖拽控件到界面上,并设置其属性、样式等信息。

最后保存UI文件,并在代码中加载和使用该文件。

3. 信号与槽机制:在QT中,每个组件都可以发出信号,而其他组件则可以连接这些信号并执行相应的槽函数。

首先需要定义一个槽函数,在该函数中实现相应的操作。

然后通过connect()函数将信号与槽函数连接起来。

4. 文件操作:QT提供了丰富的文件操作API,包括QFile、QDir、QTextStream等类。

通过这些类可以方便地进行文件读写、目录遍历等操作。

需要注意的是,在进行文件操作时需要保证文件路径正确,并进行错误处理。

四、实验心得通过本次实验,我对QT编程语言有了更深入的了解和掌握。

在实验过程中,我学习了QT框架的搭建、界面设计、信号与槽机制以及文件操作等方面的知识,并通过实践运用这些知识完成了一个简单的应用程序。

QT 知识点总结

QT 知识点总结

1、QGridLayoutQGridLayout包含多个grid,它并没有要求其中的每个grid的size相同,通常情况下,每个grid的size是不同的。

对于成员函数addWidget(widget, fromRow, fromColumn, rowSpan, columnSpan, alignment):rowSpan表示新添加进来的widget在垂直方向上跨越或者占据多少个grid。

columnSpan表示新添加进来的widget在水平方向上跨越或者占据多少个grid。

2、line edit的input mask对一个line edit设置了input mask属性后,也就限定了输入字符。

一般情况下,需要填写的字符位置是空白的,但是,你可以让该空白以某个字符占位,你只需在指定input mask 的字符末尾添加―*?‖即可,把‗?‘换为你想用来占位的一个字符。

3、利用designer设计ui总体上来说,先创建各个控件,然后设置layout相对来说好些。

另外,grid layout对设置布局前的窗口布局依赖比较大,即如果设置grid layout前的布局不同,则生效后的差别可能较大。

4、QLabel的buddy属性在qt中,只有QLabel实现了buddy机制。

只有你为QLabel设置了buddy后,文本中的字符‗&‘才能以下划线显示(这点与其他widget 不同),并创建了对应的快捷键(当然,需要+Alt),然后可以利用快捷键迅速的把光标定位到该QLabel的buddy中,例如:QLabel *what = new QLabel(―Find &What:‖);该实例对应快捷键Alt+w。

5、QMouseEvent中的坐标QMouseEvent中保存了两个坐标,一个是全局坐标,当然另外一个是局部坐标。

全局坐标(globalPos())即是桌面屏幕坐标(screen coordinates),这个跟windows下的调用getCursorPos函数得到的结果一致。

心得体会qt(优秀18篇)

心得体会qt(优秀18篇)

心得体会qt(优秀18篇)本文将从界面设计、可扩展性、易用性、性能和团队合作五个方面探讨Qt的设计心得。

首先,Qt作为一个图形界面框架,界面设计是重要的一环。

在设计界面时,要尽量简明扼要,不要添加过多的视觉元素,以免造成用户的混淆和不适。

突出重点功能,将核心操作置于界面的显著位置。

此外,也要注意UI的可定制性,让用户可以根据自己的需求个性化修改界面。

最重要的是,保持整体布局的一致性,遵循统一的视觉风格,使用户能够快速熟悉和使用。

其次,Qt的可扩展性是其杰出之处。

Qt支持模块化的设计,可以根据需求来选择和集成各种功能模块。

通过使用插件机制,我们可以轻松地添加、升级和删除功能,而不需要对整个应用程序进行重构。

这有助于提高代码的重用性和维护性,并为应用程序的发展和扩展提供了很大的灵活性。

另外,易用性也是一个重要的考虑因素。

Qt提供了丰富的自定义控件和工具,使我们能够快速构建用户友好的界面。

通过合理的布局和操作方式,用户可以直观地理解和使用应用程序。

同时,我们还可以利用Qt的事件和信号槽机制来实现交互动作和响应,使用户操作更加便捷和流畅。

总之,良好的易用性可以帮助我们吸引和留住用户。

与此同时,性能也是设计中需要重点关注的一个方面。

在使用Qt进行设计时,要尽量减少资源的占用和系统的开销。

例如,可以合理使用内存和处理器资源,优化算法和数据结构,减少重复计算和无效操作。

此外,我们还可以使用Qt提供的性能调优工具,如Qt分析器和性能监视器,来识别和解决性能瓶颈。

通过不断优化和改进,我们可以提高应用程序的响应速度和效率。

最后,团队合作是一个成功的设计过程中必不可少的因素之一。

Qt具有良好的跨平台性和协作工具,使团队成员可以在不同的操作系统和环境中共享和协同开发。

我们可以使用版本控制系统,如Git和SVN,来管理代码,确保项目的整体一致性和稳定性。

同时,我们还可以使用QtCreator等集成开发环境来促进团队成员之间的交流和合作。

qt6 c++开发指南 学习笔记

qt6 c++开发指南 学习笔记

qt6 c++开发指南学习笔记下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!qt6 c++开发指南学习笔记第一章:Qt6简介。

qt总结感想

qt总结感想

qt总结感想Qt是一种跨平台的C++应用程序开发框架,它提供了一套丰富的库和工具,可以帮助开发者轻松地构建各种类型的应用程序,包括图形用户界面(GUI)应用程序、命令行工具、嵌入式设备应用程序等等。

Qt的特点是简单易用、高效可靠、功能丰富,并且具有良好的可移植性。

Qt的简单易用让我印象深刻。

作为一个C++开发者,我发现Qt提供的API非常直观和易于理解。

Qt的类和函数命名规范清晰,符合直觉,使得编写代码变得简单快捷。

此外,Qt提供了丰富的文档和示例代码,帮助开发者快速上手并解决问题。

无论是初学者还是有经验的开发者,都可以轻松地使用Qt来开发应用程序。

Qt的高效可靠也是我对它的一大赞赏。

Qt的底层实现经过了精心设计和优化,使得应用程序在运行时具有出色的性能和稳定性。

Qt 使用了一种称为信号和槽(Signal and Slot)的机制来实现对象之间的通信,这种机制具有低耦合和高内聚的特点,使得代码易于维护和扩展。

此外,Qt还提供了一套完善的单元测试框架,可以帮助开发者编写高质量的测试用例,确保程序的正确性和稳定性。

Qt的功能丰富也是我对它的印象之一。

Qt提供了大量的模块和类,涵盖了图形、网络、数据库、多媒体、并发等各个领域的功能。

无论是开发桌面应用程序还是移动应用程序,Qt都能提供强大的支持。

例如,Qt的图形模块提供了丰富的绘图和渲染功能,可以轻松地创建各种精美的用户界面;Qt的网络模块提供了简单易用的API,可以方便地进行网络通信和数据交换;Qt的数据库模块提供了对多种数据库的访问支持,开发者可以方便地进行数据存储和查询操作。

Qt的可移植性让我对它赞不绝口。

Qt的设计目标之一就是实现跨平台开发,它可以在多个操作系统上运行,包括Windows、Linux、macOS等。

Qt使用了一种称为Qt编译器(qmake)的工具来管理项目和构建过程,开发者只需要编写一套代码,就可以将应用程序轻松地移植到不同的平台上,极大地提高了开发效率。

Qt从入门到精通

Qt从入门到精通

/doc/qilia /qt/index.htmlQt教程一——共十四步这个教程介绍了使用Qt工具包进行图形用户界面编程。

它没有包括所有的东西:强调的是教授一种图形用户界面编程的编程思想,并且介绍Qt的特征也是必需的。

一些通常情况下使用的特征在这个教程里没有用到。

第一章开始讲述一个十行的Hello World程序并且后来的每一章都介绍了一个或几个更多的概念。

一直到第十四章,程序已经从第一章的十行变成了六百五十行的游戏。

如果你对Qt完全不熟悉,如果你还没有读过如何学习Qt的话,请读一下。

教程章节:1.Hello,World!2.调用退出3.家庭价值4.使用窗口部件5.组装积木6.组装丰富的积木!7.一个事物领导另一个8.准备战斗9.你可以使用加农炮了10.像丝一样滑11.给它一个炮弹12.悬在空中的砖13.游戏结束14.面对墙壁这个小游戏看起来不像一个现代的图形用户界面应用程序。

它只使用了有用的少数图形用户界面技术,但是如果你通过它工作之后,我们建议你阅读一下教程二。

第二个教程更加正式一些,并且覆盖了包括菜单条、工具条、文件的载入和保存、对话框等典型应用程序的特征。

Qt教程一——第一章:Hello,World!第一个程序是一个简单的Hello World例子。

它只包含你建立和运行Qt应用程序所需要的最少的代码。

上面的图片是这个程序的快照。

/********************************************************************Qt教程一-2******************************************************************/#include<qapplication.h>#include<qpushbutton.h>int main(int argc,char**argv){QApplication a(argc,argv);QPushButton hello("Hello world!",0);hello.resize(100,30);a.setMainWidget(&hello);hello.show();return a.exec();}一行一行地解说#include<qapplication.h>这一行包含了QApplication类的定义。

明王讲的 qt开发笔记 大纲

明王讲的 qt开发笔记 大纲

明王是一名具有丰富经验的qt开发工程师,他有着多年的qt开发实战经验,曾参与多个大型项目的开发,积累了大量的qt开发经验和技巧。

在这篇文章中,我将根据明王的讲课内容,为大家整理出一份qt 开发笔记大纲,希望能够帮助那些正在学习qt开发的朋友们更好地系统地学习和掌握qt开发的知识。

一、qt开发环境的搭建1. 安装qt开发环境1.1 Windows评台下的qt安装1.2 Linux评台下的qt安装1.3 macOS评台下的qt安装2. qt开发工具的配置2.1 IDE的选择2.2 编译器的选择2.3 qt插件的安装二、qt基础知识1. qt的基本概念1.1 qt的特点1.2 qt的架构1.3 qt的应用范围2. qt的核心模块2.1 QtCore模块2.2 QtGui模块2.3 QtWidgets模块2.4 QtMultimedia模块2.5 QtNetwork模块2.6 QtSql模块2.7 QtWebKit模块2.8 其他模块介绍和应用场景分析三、qt UI设计与布局1. qt的UI设计工具1.1 Qt Designer介绍1.2 Qt Creator介绍2. qt的基本控件2.1 QLabel2.2 QPushButton2.3 QLineEdit2.4 QComboBox2.5 QCheckBox2.6 QRadioButton2.7 其他常用控件介绍3. qt的布局管理3.1 布局管理器的概念3.2 QHBoxLayout3.3 QVBoxLayout3.4 QGridLayout3.5 实际布局案例分析四、qt信号与槽机制1. 信号槽的基本概念1.1 信号和槽的作用1.2 信号槽的连接方式2. 信号槽的使用场景2.1 点击事件处理2.2 定时器事件处理2.3 自定义信号槽的应用2.4 多线程编程中的信号槽使用五、qt网络编程1. qt的网络模块介绍1.1 TCP编程1.2 UDP编程1.3 HTTP编程2. qt网络编程实例2.1 客户端/服务器模型的实现 2.2 文件传输应用案例2.3 网络数据采集与展示六、qt数据库编程1. qt的数据库模块介绍1.1 SQL数据库1.2 NoSQL数据库1.3 数据库连接方式2. qt数据库编程实例2.1 数据库的增删改查操作2.2 数据库事务处理2.3 数据库连接池的实现七、qt跨评台开发技巧1. 跨评台编译1.1 编写高度可移植的qt代码 1.2 跨评台兼容性测试1.3 跨评台发布与打包2. 跨评台开发注意事项2.1 界面效果的统一2.2 评台特定功能的处理2.3 跨评台性能优化策略八、qt性能调优与调试技巧1. qt性能调优工具介绍1.1 qt的性能监控工具1.2 qt的性能调优工具2. qt性能调优实践2.1 内存分析和优化2.2 界面渲染优化2.3 事件处理性能优化3. qt调试技巧3.1 调试工具的使用3.2 代码调试技巧3.3 内存泄露排查方法以上就是明王讲授的qt开发笔记大纲,希期对大家学习qt开发有所帮助。

Qt - ModelView模式学习笔记

Qt - ModelView模式学习笔记

Ref: /superjoel/article/details/5112120一般来说,Model里面并没有真正存储数据(数据少的话也可以直接存储在Model里),它的数据是从真正的“肉(raw)”里取得,如一个disk file,或database的query result set等等。

那么这个model究竟是干什么用的呢?说白了吧,它就是负责将“肉”数据获取并提供给view,然后将view所做的对“肉”数据的修改更新至真正的“肉”中。

所以,读写文件、操作数据库、网络通讯等一系列与数据打交道的工作就在model中做了。

有的时候“肉”可能真的很肥,所以model还有一项重要的工作就是把这些“肉”编号。

这样就出现了Model Index这个非常重要的类。

一般来说,它使用一个2维的编号(row/colum)来对“肉”编号。

但对于tree 这种有层次结构的数据来说,又加上一个parent index作为第3个编号。

即一个父亲下面的叶子也是从0,0开始编号,获取model index的时候用递归来实现。

OK,现在model 已经有了一堆编好号码的“肉”了,谁来买啊?“肉”便宜了。

View适时出现,注意,很多view可以同时来买同一块“肉”。

(汗,不开玩笑了,这篇blog快水了)。

当view需要显示某些数据时,它们通过model index从model中获取数据(调用model的data函数,当model的data变化时,它也会自动发dataChanged signal 给所有的view以便它们更新)。

当然,在view中也可以调用model的setData函数来设定某个model index所对应的数据。

这里要说明一下model中的数据,用QVarient来承载,可以是所有Qt支持的类型,比较贴心的是,数据可以分成多个角色(role),例如Qt::DisplayRole专用于显示,Qt::BackgroundRole用于显示背景色等等。

Qt中常用知识点

Qt中常用知识点

Qt中常⽤知识点1:QRegExp 正则表达式QRegExp regExp("[a-zA-Z][1-9][0-9]{0,2}");xxx->setValidator(new QRegExpValidator(regExp,this));lineEdit->setValidator(new QRegExpValidator(regExp,this));2:QObject::connect()connect(objectA,SIGNAL(methodA()),objectB,SLOT(methodB()));//methodA()的输⼊参数可以⽐methodB()的参数多3:QLineEdit ⾏⽂字输⼊widgetlineEdit->hasAcceptableInput(); //返回true or falselineEdit->setText("please input text");button->setEnabled(true); //set true or false4:信号函数的定义和发射class A {Q_OBJECTsignals:void funs(type A,type B); //定义信号函数};type a;type b;emit funs(a,b);//发射上⾯定义的信号函数,当然需要使⽤QObjetc::connect()这个函数把这个信号函数与真实的slot函数绑定起来,slot函数才是真正⼲活的函数5:Qt中可以动态调整窗⼝⼤⼩的Widget有哪些QTabWidgetQListWidget 和 QStackedWidget 配合使⽤QTreeWidget 和 QStackedWidget 配合使⽤6:对⼀个继承QDialog的类,能动态改变窗⼝⼤⼩的⽅法如下://隐藏必要的⼦Widgetxx->hide();yy->hide();//下⾯这个⽅法⾮常关键,会根据xx,yy⼦widget是否显⽰,动态调整窗⼝的⼤⼩layout()->setSizeConstraint(QLayout::SetFixedSize);7:创建⼀个Qt风格的⼦类class MyClass: pulbic QObject{public:MyClass(const string& text,QObject *parent=0);};MyClass::MyClass(const string& text,QObject *parent): QObject(parent){//构造函数的定义}8:QList的使⽤例⼦QList<QString> list;list<<"foo"<<"bar"<<"baz";foreach(QString a,list)qDebug()<<a;#相当好⽤的QListQList<QString> list;list << "first";list.append( "second" );list.prepend( "third" );list.insert( 1, "fourth" );list.insert( 4, "fifth" );9:Qt迭代器的⽤法QList<int> list;list << 23 << 27 << 52 << 52;QListIterator<int> javaIter( list );while( javaIter.hasNext() )qDebug() << javaIter.next();QList<int>::const_iterator stlIter;for( stlIter = list.begin(); stlIter != list.end(); ++stlIter ) qDebug() << (*stlIter);10:使⽤迭代器修改list的元素QList<int> list;list << 27 << 33 << 61 << 62; QMutableListIterator<int> javaIter( list );while( javaIter.hasNext() ){int value = javaIter.next() + 1;javaIter.setValue( value );qDebug() << value;}QList<int>::Iterator stlIter;for( stlIter = list.begin(); stlIter != list.end(); ++stlIter ) {(*stlIter) = (*stlIter)*2;qDebug() << (*stlIter);}11:所有widget的分类button:QPushButtonQToolButtonQRadioButtonbox:QCheckBoxQGroupBoxQToolBoxQSpinBoxQDoubleSpinBoxQComboBoxedit:QLineEditQTextEditQDateEditQTimeEditQDateTimeEditwidget:QTabWidgetview:QListViewQTreeViewQTableViewdialog:QInputDialogQProgressDialogQColorDialogQFontDialogQPageSetupDialogQFileDialogQPrintDialogothers:QFrame QLabel QLCDNumber QProgressBarQTextBrowser QSlider QDialQMessageBox QErrorMessage12:在主窗⼝程序中打开新的dialog对话框的⽅式#1 阻塞式:(主窗⼝的内容是⽆法访问的)QDialog dialog;Ui_Dialog a;a.setupUi(&dialog);if(dialog.exec()) // 当点下ok button时会返回accept=true,当点下cancel时会返回reject=0 {}#2 ⾮阻塞式:(访问⼦dialog的同时,也能访问⽗窗⼝)findDialog=new FindDialog(this);connect() //把finddialog的信息传递给接受信息,处理信息的槽函数findDialog->show();findDialog->raise();findDialog->activateWindow();13:关于QTableWidget的使⽤QTableWidget * spreadsheet=new QTableWidget(this);setCentralWidget(spreadsheet);//这个⽅法是QMainWindow的⽅法#得到当前⿏标focus的单元格的⾏坐标和列坐标spreadSheet->currentRow()spreadSheet->currentColumn()#得到当前单元格的内容//如果当前单元格内没有内容,if内容为NULLif(spreadSheet->currentItem()){cout<<spreadSheet->currentItem()->text()<<endl;}#⿏标focus的单元格位置发⽣变化时,触发如下信号函数currentCellChanged(int,int ,int,int)14:主窗⼝widget常⽤的⽅法setWindowTitle();setWindowIcon(QIcon("xx.png"));#在QMainWindow中如何添加菜单栏和⼯具栏#创建需要 actionnewAction=new QAction("&new",this);newAction.setIcon(QIcon("xx.png"));connect(newAction,SIGNAL(),object,SLOT()); //让action⼲相应的活#添加⼀个菜单栏QMenu *fileMenu=menuBar()->addMenu("&File");fileMenu->addAction(neAction);fileMenu->addSeparator();#添加⼀个QToolBarQToolBar * fileToolBar= addToolBar("&file");fileToolBar->addAction(newAction);fileToolBar->addSeparator();//menufile->addSeparator()这个函数也是返回⼀个QAction *类型的数据#在statusBar()中添加widgetstatusBar()->addWidget(label);statusBar()->addWidget(label,1); //从左开始放label,1表⽰⽤空⽩扩展剩下的右边空间statusBar()->showMessage(const QString & str);15:QLabel的所有设置QLabel * label=new QLabel("w999");label->setAlignment(Qt::AlignHCenter);//⽂字对齐⽅式label->setMinimumSize(label-sizeHint());//⽂字宽度最少4个字符,当QLabel中没有字符时,也会保证最少有4个字符的空⽩位置显⽰16:QSettings的⽤法#创建settings对象QSettings settings("Yzs_think", "Application");公司或组织名称:Yzs_think,程序名称:Application#从settings中读出数据,设置应⽤程序的相关参数,可以设置默认值QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();QSize size = settings.value("size", QSize(400, 400)).toSize();resize(size);move(pos);#程序退出前,把需要保存的参数保存到settings中,书上说是保存到注册表中去了,还没有实践过QSettings settings("Yzs_think", "Application");settings.setValue("pos", pos());settings.setValue("size", size());17:窗⼝重要属性设置#保证容器⼀直在top layer(就是常⽤的fix 窗⼝在顶层)w.setWindowFlags(Qt::WindowStaysOnTopHint);18:各类event函数调⽤的条件//event函数被调⽤,分为下⾯⼏种情况:1:⽤户对mouse and keyboard的操作2:定时器时间到了3:⽹络超时4:窗⼝管理器1:上⾯是4类称为event sources,事件产⽣的源头2:event object:这个就是包含事件源有何种改变的事件对象(如QPressedEvent *e)3:event target,这处就是事件会通知给谁(⼀般就是事件处理函数)⼀句话说:event sources发⽣的事件变化,包装到event object中,传递给event target//窗⼝⼤⼩发⽣变化时,或是⿏标从⼀个widget到另⼀个widget时移动时,程序启动时会在构造函数调⽤调⽤之后,调⽤ paintEvent函数(参数类型不能写错)void paintEvent(QPaintEvent *)//点了右上⾓的x时,会调⽤该⽅法void closeEvent(QCloseEvent *)19:关于Qt中的主窗⼝qt中的主窗⼝是是没有⽗窗⼝的有⽗窗⼝的widget,称为⼦部件Qt::WindowFlags作为⽗窗⼝的第⼆个参数,可以定义⽗窗⼝很多重要属性:如下Qt::WidgetQt::DialogQt::SplashScreen#保证容器⼀直在top layer(就是常⽤的fix 窗⼝在顶层)w.setWindowFlags(Qt::WindowStaysOnTopHint);#函数对窗⼝进⾏最⼤,最⼩化,全屏操作setWindowState()#对于主窗⼝,我们⾮常关⼼窗⼝的⼤⼩和出现的位置,下⾯的函数是getter,主窗⼝包含两部分:1:框架部分(如title and border):使⽤x(),y(),pos(),move(),frameGeometry()函数访问2:内容部分,称为⽆框架的窗⼝:使⽤width(),height(),geometry(),setGeometry(),Rect(),Size()函数访问 ,resize()函数是调整内容部分的⼤⼩。

多年来开发QT累计的笔记

多年来开发QT累计的笔记

QT学习笔记-1.QT主要的对象说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面所以现在想认认真真的学习一个c++图形界面框架库本来想学习Xwidget但是这个资料不大好找有啥问题不好解决那就学习QT吧不说QT的优缺点,不说如何编译QT从QT的主要库类开始吧知道了基本的对象之后如果需要学习看看文档就知道了如果需要编译QT的话再下个代码试着编译吧QApplication 应用程序类管理图形用户界面应用程序的控制流和主要设置QLabel 标签类提供文本或者图像的显示QPushButton 按钮类提供了命令按钮按钮的一种QButtonGroup 按钮组合类按钮组相关按钮的组合QGroupBox 群组类一个有标题的组合框QDateTimeEdit 日期时间编辑框类QLineEdit 行编辑框类单行文本编辑器QTextEdit 文本编辑框类单页面多信息编辑器对象QComboBox 组合框类QProgressBar 进度条类QLCDNumber 数字显示框类QScrollBar 滚动条类QSpinBox 微调框类QSlider 滑动条类QIconView 图标视图类QListView 列表视图类QListBox 列表框类QTable 表格类QValidator 有效性检查类QImage 图像类QMainWindow 主窗口类QPopupMenu 弹出性菜单类QMenuBar 菜单栏类QToolButton 工具按钮类QToolTip 提示类QWhatsThis 这是什么类QAction 动作类QHBoxLayout 水平布局类QVBoxLayout 垂直布局类QGridLayout 表格布局类QT对话框类QMessageBox 消息对话框类QProgressDialog 进度条对话框类QWizard 向导对话框类QFileDialog 文件对话框类QColorDialog 颜色对话框类QFontDialog 字体对话框类QPrintDialog 打印对话框类基本就这些对象了要系统学习QT 还需要看看QT的slot系统,QT库类接口等具体的学习就是看例子咯QT学习笔记-2.QT窗体布局和皮肤加载学习QT的一个原因是貌似QT做出来的界面比较绚丽我倒想看看能做出来啥样子的从QT窗体布局说起凡是窗体布局无非就是如何摆放的问题1.想当然如果摆放有2个方式一个是所见即所得,一个是使用布局管理器先说后者吧2.QT有好几种布局管理器无非就是啥子流式布局,格子布局等等从这个层级上说软件界面都是布局嵌套的3.布局和控件的关系一般是一个布局对应于一个控件容器(或者顶层控件)使用当前布局管理器加挂子控件(容器)即可然后给当前控件挂上布局管理器即可下面是一个简单的QT Layout的例子(从QT例子改的)1.class Dialog : public QDialog2.{3. Q_OBJECT4.public:5. Dialog();6.private:7. void createHorizontalGroupBox();8.9. enum {button_number = 4};10. QGroupBox *groupbox;11. QPushButton *buttons[button_number];12. QDialogButtonBox *buttonBox;13.};复制代码实现如下:1.#include <QtGui>2.3.#include "dialog.h"4.5.//! [0]6.Dialog::Dialog()7.{8. createHorizontalGroupBox();9.10. buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok11. | QDialogButtonBox::Cancel);12.13. connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));14. connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));15.16. QVBoxLayout *mainLayout = new QVBoxLayout;17. mainLayout->addWidget(groupbox);18. mainLayout->addWidget(buttonBox);19. setLayout(mainLayout);20.21. setWindowTitle(tr("LayoutTest"));22.}23.24.void Dialog::createHorizontalGroupBox()25.{26. groupbox = new QGroupBox(tr("Layout Test"));27. QHBoxLayout *layout = new QHBoxLayout;28.29. buttons[0] = new QPushButton(tr("Button1"));30. buttons[1] = new QPushButton(tr("Button2"));31. buttons[2] = new QPushButton(tr("Button3"));32. buttons[3] = new QPushButton(tr("Button4"));33.34. for(int i = 0;i<button_number;i++)35. layout->addWidget(buttons[i]);36. groupbox->setLayout(layout);37.}复制代码几个知识点:1.groupbox = new QGroupBox(tr("Layout Test"));Layout Test 是个文本这个无须解释那tr呢?查查资料知道是为了支持多语言先知道即可以后使用的话在具体查查吧2.QDialogButtonBox是个什么东西看看最终的程序界面吧原来是对话框的确认和取消按钮再看信号槽函数无非就是绑定按钮到操作函数connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));那accepted和accept函数有啥区别?看看文档accept函数的解释是:Hides the modal dialog and sets the result code to Accepted accpeted函数的解释是:This signal is emitted when the dialog has been accepted either在说说QT皮肤学习QT的主要目的就是想做做脸蛋好看好的软件界面那就试试看吧查到的QT有一个名叫QSS(CSS?)的文件可以原来换肤那就改改看吧#include <QApplication>#include <QFile>#include <QStyleFactory>#include <QTextStream>#include "dialog.h"void setSkin(QApplication* const app, QString const &skinFile);int main(int argc, char *argv[]){QApplication app(argc, argv);setSkin(&app ,"skin.qss");Dialog dialog;dialog.show();return app.exec();}void setSkin(QApplication* const app, QString const &skinFile){QFile qss(skinFile);qss.open(QFile::ReadOnly);app->setStyleSheet(qss.readAll());qss.close();}相应的QSS文件如下:QPushButton{color:red;background:url(setting.png)}这里把PushButton的文本颜色设置为红色同时把它的背景设置为图片stting.pngQT学习笔记-3.Codecs例子学习QT自带的例子Codecs是一篇关于保存和载入不同编码文本的例子其界面比较简单一个简单的单文档而已有2个主要的对象一个是MainWindow用于窗体主界面另外一个是PreviewForm用于显示编码格式列表1.其编码格式的获取部分代码如下:QMap<QString, QTextCodec *> codecMap;QRegExp iso8859RegExp("ISO[- ]8859-([0-9]+).*");foreach (int mib, QTextCodec::availableMibs()) {QTextCodec *codec = QTextCodec::codecForMib(mib);QString sortKey = codec->name().toUpper();int rank;if (sortKey.startsWith("UTF-8")) {rank = 1;} else if (sortKey.startsWith("UTF-16")) {rank = 2;} else if (iso8859RegExp.exactMatch(sortKey)) {if (iso8859RegExp.cap(1).size() == 1)rank = 3;elserank = 4;} else {rank = 5;}sortKey.prepend(QChar('0' + rank));codecMap.insert(sortKey, codec);}codecs = codecMap.values();通过使用foreach循环来获取支持的编码格式并保存不过看上去foreach (int mib, QTextCodec::availableMibs())有点奇怪查查资料解释是foreach(variables ,container)关键字是Qt对c++的一个扩展,主要用于按顺序历经容器(container)中的对象2关于文件菜单的生成和设置菜单的构造一个例子saveAsMenu = new QMenu(tr("&Save As"), this);这里有2个参数一个是菜单显示文另外一个是当前窗体指针然后就可以加载子菜单,设置分隔符,设置事件响应等操作了例子为:fileMenu = new QMenu(tr("&File"), this);fileMenu->addAction(openAct);fileMenu->addMenu(saveAsMenu);fileMenu->addSeparator();fileMenu->addAction(exitAct);那如何绑定菜单到当前窗体呢如下:menuBar()->addMenu(fileMenu);menuBar()->addSeparator();menuBar()->addMenu(helpMenu);menuBar()是QmainWindow的成员函数用于获取窗体菜单项指针3.QT对象QActionQT文档对QAction的解释是可以抽象用户接口对象-可以插入控件例子如下:openAct = new QAction(tr("&Open"), this);openAct->setShortcuts(QKeySequence::Open);connect(openAct, SIGNAL(triggered()), this, SLOT(open()));无非就是对象声明,设置快捷键,链接函数和响应而已4.窗体设置setWindowTitle(tr("Codecs"));resize(500, 400);5.消息对话框QMessageBox::about(this, tr("About Codecs"),tr("The <b>Codecs</b> example demonstrates how to read and write " "files using various encodings."));QT学习笔记-4.信号与插槽本文主要是对C++ GUI Programming with Qt4一书 Signals and Slots in Depth 部分的翻译信号与插槽机制是Qt编程的基础.它可以绑定对象而不需要对象之间彼此了解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Qt输入与输出:
Qt通过QIODevice为输入输出提供了极佳的支持。

其子类有Qfile、QtemporaryFile、Qbuffer等,其中Qfile 是在本地文件系统和嵌入式资源中存取文件,属于随机存取设备,可以从任意位置多次读取字节位所存储的数据。

另外Qt还提供了两个更高级别的流类:QdataStream用来读写二进制数据,QtextStream用来读写文本数据。

Qt中载入和保存二进制数据的最简单方式是通过实例化一个QFile打开文件,然后通过QdataStream对象存取它。

QdataStream提供了一种与平台无关的存储格式,不仅支持Qlist<I>和Qmap<K,T>等Qt容器类,还支持整型和双精度型等基本的C++类等。

写了一个打开txt文件的程序并成功运行,总结一下:
1.设计ui界面时左边的工具箱里工具都是分类排列的,有layout(布局)、有输入工具(input widgets)也有显示工具(Display widgets),设计的时候要合理的选择。

另外图形用户界面也可以用代码来创建,只是看着比较麻烦,效果是一样的。

2.菜单中的命令用trigger信号触发,控件名称是ui.action-- (--代表自己定义的命令)。

3.利用QfileDialog来选择打开的文件,实例化一个Qfile,将文件内容读入QtextStream(in(&file)),readline 函数实现一行行读取,然后定义Qstring变量记录每行的内容,通过textbrowser的setPlainText显示文档。

4.Qt Assistant很好很强大!!要充分利用。

另外:
QfileDialog:使用户能够在文件系统中选择一个或多个文件。

创建QfileDialog最简单的方法是使用静态函数。

在不同系统中静态函数会调用本地的file dialog。

fileName=QfileDialog::getOpenFileName(this, tr(“Open Image”,”/home/jana”,tr(“Image Files(*.png *.jpg *.bmp));
注解:this指dialog的父窗体,窗口标题是“Open Image”,路径是”/home/jana”,最后是过滤器,表示能打开的文件格式。

如果想打开多种格式的文件,也可以用两个分号隔开过滤器:
“Images(*.png *.xpm *.jpg);;Text files(*.txt) ;;XML files(*.xml)”
2011-4-1
在不同的平台上,基本的C++类型如short,char,int,long,long long会有不同的字长。

最好把它们转换为qint8,quint8,qint16,quint16,qint32,quint32,qint64,quint64,这些类型能确保字长是不随平台改变的。

相关文档
最新文档