Qt学习笔记--图形视图框架讲课讲稿_第1页
Qt学习笔记--图形视图框架讲课讲稿_第2页
Qt学习笔记--图形视图框架讲课讲稿_第3页
Qt学习笔记--图形视图框架讲课讲稿_第4页
Qt学习笔记--图形视图框架讲课讲稿_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、Good is good, but better carries it.精益求精,善益求善。Qt学习笔记-图形视图框架Qt学习笔记-图形视图框架(一)2010-07-1107:40优点:处理多个图元,单击,拖动,选择图元架构:一个场景,多个图元位于其中,通过视图显示主要应用:绘图软件,显示地图软件当使用没有变换的视图观察场景时,场景中的一个单元对应屏幕上的一个像素图元坐标通常以图元中心为原点,X轴正方向为向右,Y轴正方向为向下场景坐标的原点在场景中心,X轴正方向为向右,Y轴正方向为向下视图坐标以左上角为原点,X轴正方向为向右,Y轴正方向为向下所有的鼠标事件最开始都是使用视图坐标场景:图元的容器

2、1.提供管理很多图元的接口2.传播事件到图元中3.管理图元状态,例如选择和焦点处理4.提供非转换的绘制功能,主要用于打印QGraphicsScenescene;QGraphicsRectItem*rect=scene.addRect(QRectF(0,0,100,100);/添加图元QGraphicsItem*item=scene.itemAt(50,50);/查询图元/item=rect;通过QGraphicsScene:setSelectionArea()可以选择场景的任一个图元,QGraphicsScene:setSelectedItems()返回被选择的图元设置焦点图元QGraphic

3、sScene:setFocusItem(),setFocus(),QGraphicsScene:focusItem(),返回焦点图元视图:一个可视的子部件,可视化场景的内容多个视图可以显示同一个场景坐标转换:QGraphicsView:mapToScene(),QGraphicsView:mapFromScene()图元:支持鼠标事件,滚轮事件,上下文菜单事件支持键盘输入焦点,按键事件支持拖放支持分组冲突探测提供坐标转换,图元与场景,图元与图元之间利用QGraphicsItem:shape()和QGraphicsItem:collidesWith()实现冲突探测,这2个函数都是虚函数相关类:Q

4、GraphicsScene,QGraphicsItem,QGraphicsViewQGraphicsItem子类:QGraphicsEllipseItemprovidesanellipseitemQGraphicsLineItemprovidesalineitemQGraphicsPathItemprovidesanarbitrarypathitemQGraphicsPixmapItemprovidesapixmapitemQGraphicsPolygonItemprovidesapolygonitemQGraphicsRectItemprovidesarectangularitemQGrap

5、hicsSimpleTextItemprovidesasimpletextlabelitemQGraphicsTextItemprovidesanadvancedtextbrowseritemQGraphicsSvgItemprovidesaSVGfileitemQGraphicsScene:拥有多个图元,包含三层:背景层,图元层,前景层背景层和前景层可以使用QBrush绘制,也可以使用drawBackground(),drawForeground()实现如果使用图片作为背景,可以用textureQBrush(pixmap)实现前景层brush可以使用半透明的白色实现褪色效果,或者使用交叉模式

6、实现网格重叠场景可以告诉我们,哪些图元发生冲突,哪些图元被选择,哪些图元位于一个特定的点或者区域每个图元可以是:1.顶级图元,场景是它的父亲;2.孩子,它的父亲是另一个图元,任何作用于父图元的转换都将自动应用于它的孩子2种分组方式:1.一个图元成为另一个图元的孩子;2.使用QGraphicsItemGroup。使用分组,可以使位于同一个组的所有图元的操作都相同QGraphicsView:是一个Widget,用于显示一个场景,提供滚动条功能和转换功能,可以缩放和旋转场景。默认使用内建的2D画图引擎,可以使用OpenGL:在构造后,调用setViewport()坐标系统:使用3种坐标系统:view

7、port,scene,itemviewport:位于QGraphicsView内部scene:逻辑坐标用于定位顶级图元item:与图元相关,以图元的(0,0)为中心,移动图元时,它的坐标不会改变实践中,主要关注场景坐标(定位顶级图元)和图元坐标(定位子图元和绘制图元)在图元自己的坐标系统里面绘图意味着我们不用担心它在场景中的位置和应用于它的坐标转换Demo:/主要特点:/上下文菜单,右键菜单/copy-paste方法/TEMPLATE=appHEADERS=diagramwindow.hlink.hnode.hpropertiesdialog.hSOURCES=diagr

8、amwindow.cpplink.cppmain.cppnode.cpppropertiesdialog.cppFORMS=propertiesdialog.uiRESOURCES=resources.qrc/link.h#ifndefLINK_H#defineLINK_H#includeclassNode;classLink:publicQGraphicsLineItem/如果使用信号和槽,采用多继承publicQObjectpublic:Link(Node*fromNode,Node*toNode);Link();Node*fromNode()const;Node*toNode()cons

9、t;voidsetColor(constQColor&color);QColorcolor()const;voidtrackNodes();/节点移动时,跟踪节点private:Node*myFromNode;/连线的2个节点Node*myToNode;#endif/link.cpp#include#includelink.h#includenode.hLink:Link(Node*fromNode,Node*toNode)myFromNode=fromNode;myToNode=toNode;myFromNode-addLink(this);/节点增加连线,每个节点有任意多个连线myToNo

10、de-addLink(this);setFlags(QGraphicsItem:ItemIsSelectable);/连线可以被选择,然后删除setZValue(-1);/在场景中显示的前后层次,因为连线是两个节点的中心,-1表示位于最后面,/节点覆盖了部分连线setColor(Qt:darkRed);/设置线的颜色trackNodes();Link:Link()myFromNode-removeLink(this);/删除连线时,将删除它在节点中的记录myToNode-removeLink(this);Node*Link:fromNode()constreturnmyFromNode;Nod

11、e*Link:toNode()constreturnmyToNode;voidLink:setColor(constQColor&color)setPen(QPen(color,1.0);QColorLink:color()constreturnpen().color();voidLink:trackNodes()/pos()返回节点在场景中或者父图元中的位置setLine(QLineF(myFromNode-pos(),myToNode-pos();/node.h#ifndefNODE_H#defineNODE_H#include#include#include#includeclassLi

12、nk;classNode:publicQGraphicsItemQ_DECLARE_TR_FUNCTIONS(Node)/在此类中增加tr()功能,直接使用,而不需要QObject:tr()了public:Node();Node();voidsetText(constQString&text);QStringtext()const;voidsetTextColor(constQColor&color);QColortextColor()const;voidsetOutlineColor(constQColor&color);QColoroutlineColor()const;voidsetBa

13、ckgroundColor(constQColor&color);QColorbackgroundColor()const;voidaddLink(Link*link);voidremoveLink(Link*link);QRectFboundingRect()const;/重新实现,决定一个图元是否需要绘制,必须的QPainterPathshape()const;/重新实现,返回图元的精确形状,/决定一个点是否在图元内,或者2个图元是否发生冲突voidpaint(QPainter*painter,/重新实现,画图,必须的constQStyleOptionGraphicsItem*option

14、,QWidget*widget);protected:voidmouseDoubleClickEvent(QGraphicsSceneMouseEvent*event);/双击事件,修改节点的文本QVariantitemChange(GraphicsItemChangechange,/重新实现,图元变化时,相关的连线发生变化constQVariant&value);/没有使用mouseMoveEvent(),/是因为程序可以改变节点位置private:QRectFoutlineRect()const;introundness(doublesize)const;QSetmyLinks;QStri

15、ngmyText;QColormyTextColor;QColormyBackgroundColor;QColormyOutlineColor;#endif/link.cpp#include#includelink.h#includenode.hNode:Node()myTextColor=Qt:darkGreen;myOutlineColor=Qt:darkBlue;myBackgroundColor=Qt:white;setFlags(ItemIsMovable|ItemIsSelectable);/节点可以移动,被选择Node:Node()foreach(Link*link,myLink

16、s)/删除所有的连线,防止边界效应,不使用aDeleteAll()deletelink;voidNode:setText(constQString&text)prepareGeometryChange();/改变节点内的文本时,矩形可能会发生变化myText=text;update();QStringNode:text()constreturnmyText;voidNode:setTextColor(constQColor&color)myTextColor=color;update();QColorNode:textColor()constreturnmyTextColor;voidNode

17、:setOutlineColor(constQColor&color)myOutlineColor=color;update();QColorNode:outlineColor()constreturnmyOutlineColor;voidNode:setBackgroundColor(constQColor&color)myBackgroundColor=color;update();QColorNode:backgroundColor()constreturnmyBackgroundColor;voidNode:addLink(Link*link)myLinks.insert(link);

18、/增加连线时,记录连线voidNode:removeLink(Link*link)myLinks.remove(link);QRectFNode:boundingRect()const/View决定是否绘制矩形constintMargin=1;returnoutlineRect().adjusted(-Margin,-Margin,+Margin,+Margin);QPainterPathNode:shape()const/View用于冲突探测QRectFrect=outlineRect();QPainterPathpath;path.addRoundRect(rect,roundness(r

19、ect.width(),roundness(rect.height();returnpath;/绘制图元voidNode:paint(QPainter*painter,constQStyleOptionGraphicsItem*option,QWidget*/*widget*/)QPenpen(myOutlineColor);if(option-state&QStyle:State_Selected)/图元被选择pen.setStyle(Qt:DotLine);pen.setWidth(2);painter-setPen(pen);painter-setBrush(myBackgroundCo

20、lor);QRectFrect=outlineRect();painter-drawRoundRect(rect,roundness(rect.width(),roundness(rect.height();painter-setPen(myTextColor);painter-drawText(rect,Qt:AlignCenter,myText);/双击节点,弹出标准输入对话框voidNode:mouseDoubleClickEvent(QGraphicsSceneMouseEvent*event)QStringtext=QInputDialog:getText(event-widget(

21、),tr(EditText),tr(Enternewtext:),QLineEdit:Normal,myText);if(!text.isEmpty()setText(text);/拖动节点时,调用此函数QVariantNode:itemChange(GraphicsItemChangechange,constQVariant&value)if(change=ItemPositionHasChanged)foreach(Link*link,myLinks)link-trackNodes();returnQGraphicsItem:itemChange(change,value);QRectFN

22、ode:outlineRect()constconstintPadding=8;QFontMetricsFmetrics=qApp-font();QRectFrect=metrics.boundingRect(myText);rect.adjust(-Padding,-Padding,+Padding,+Padding);rect.translate(-rect.center();returnrect;intNode:roundness(doublesize)constconstintDiameter=12;return100*Diameter/int(size);/diagramwindow

23、.h#ifndefDIAGRAMWINDOW_H#defineDIAGRAMWINDOW_H#include#includeclassQAction;classQGraphicsItem;classQGraphicsScene;classQGraphicsView;classLink;classNode;classDiagramWindow:publicQMainWindowQ_OBJECTpublic:DiagramWindow();privateslots:voidaddNode();voidaddLink();voiddel();voidcut();voidcopy();voidpast

24、e();voidbringToFront();voidsendToBack();voidproperties();/弹出属性设置对话框voidupdateActions();/更新菜单栏和工具栏的动作,哪些可用,哪些不可用private:typedefQPairNodePair;voidcreateActions();voidcreateMenus();voidcreateToolBars();voidsetZValue(intz);voidsetupNode(Node*node);Node*selectedNode()const;Link*selectedLink()const;NodePa

25、irselectedNodePair()const;QMenu*fileMenu;QMenu*editMenu;QToolBar*editToolBar;QAction*exitAction;QAction*addNodeAction;QAction*addLinkAction;QAction*deleteAction;QAction*cutAction;QAction*copyAction;QAction*pasteAction;QAction*bringToFrontAction;QAction*sendToBackAction;QAction*propertiesAction;QGrap

26、hicsScene*scene;QGraphicsView*view;intminZ;/sendToBack(),bringToFront()使用intmaxZ;intseqNumber;/唯一标示一个节点的文本;#endif/digramwindow.cpp#include#includediagramwindow.h#includelink.h#includenode.h#includepropertiesdialog.hDiagramWindow:DiagramWindow()scene=newQGraphicsScene(0,0,600,500);/创建场景,起始点为(0,0),宽60

27、0,高500view=newQGraphicsView;view-setScene(scene);/显示场景view-setDragMode(QGraphicsView:RubberBandDrag);/选择多个节点方式:1.按ctrl;2.设置橡皮筋方式view-setRenderHints(QPainter:Antialiasing|QPainter:TextAntialiasing);view-setContextMenuPolicy(Qt:ActionsContextMenu);/右键菜单setCentralWidget(view);minZ=0;maxZ=0;seqNumber=0;

28、createActions();createMenus();createToolBars();connect(scene,SIGNAL(selectionChanged(),this,SLOT(updateActions();setWindowTitle(tr(Diagram);updateActions();/增加一个节点voidDiagramWindow:addNode()Node*node=newNode;node-setText(tr(Node%1).arg(seqNumber+1);setupNode(node);voidDiagramWindow:addLink()NodePair

29、nodes=selectedNodePair();if(nodes=NodePair()return;Link*link=newLink(nodes.first,nodes.second);scene-addItem(link);/删除选择的图元:首先删除连线,然后删除节点,以防止多次删除同一个连线voidDiagramWindow:del()QListitems=scene-selectedItems();QMutableListIteratorit(items);while(it.hasNext()Link*link=dynamic_cast(it.next();if(link)delet

30、elink;it.remove();qDeleteAll(items);/剪切操作:先复制,后删除voidDiagramWindow:cut()Node*node=selectedNode();if(!node)return;copy();deletenode;/拷贝操作:值得研究!voidDiagramWindow:copy()Node*node=selectedNode();if(!node)return;QStringstr=QString(Node%1%2%3%4).arg(node-textColor().name().arg(node-outlineColor().name().a

31、rg(node-backgroundColor().name().arg(node-text();QApplication:clipboard()-setText(str);voidDiagramWindow:paste()QStringstr=QApplication:clipboard()-text();QStringListparts=str.split();if(parts.count()=5&parts.first()=Node)Node*node=newNode;node-setText(QStringList(parts.mid(4).join();/连接字符串列表node-se

32、tTextColor(QColor(parts1);node-setOutlineColor(QColor(parts2);node-setBackgroundColor(QColor(parts3);setupNode(node);voidDiagramWindow:bringToFront()+maxZ;setZValue(maxZ);/改变绘图顺序,首先绘制父图元,然后是子图元,根据子图元Z值的大小,/值最小,最先绘制,值最大,最后绘制voidDiagramWindow:sendToBack()-minZ;setZValue(minZ);voidDiagramWindow:propert

33、ies()Node*node=selectedNode();Link*link=selectedLink();if(node)PropertiesDialogdialog(node,this);dialog.exec();elseif(link)QColorcolor=QColorDialog:getColor(link-color(),this);if(color.isValid()link-setColor(color);/更新动作使能voidDiagramWindow:updateActions()boolhasSelection=!scene-selectedItems().isEmp

34、ty();boolisNode=(selectedNode()!=0);boolisNodePair=(selectedNodePair()!=NodePair();cutAction-setEnabled(isNode);copyAction-setEnabled(isNode);addLinkAction-setEnabled(isNodePair);deleteAction-setEnabled(hasSelection);bringToFrontAction-setEnabled(isNode);sendToBackAction-setEnabled(isNode);propertie

35、sAction-setEnabled(isNode);foreach(QAction*action,view-actions()view-removeAction(action);/删除右键菜单foreach(QAction*action,editMenu-actions()if(action-isEnabled()view-addAction(action);/增加右键菜单voidDiagramWindow:createActions()exitAction=newQAction(tr(E&xit),this);exitAction-setShortcut(tr(Ctrl+Q);connec

36、t(exitAction,SIGNAL(triggered(),this,SLOT(close();addNodeAction=newQAction(tr(Add&Node),this);addNodeAction-setIcon(QIcon(:/images/node.png);addNodeAction-setShortcut(tr(Ctrl+N);connect(addNodeAction,SIGNAL(triggered(),this,SLOT(addNode();addLinkAction=newQAction(tr(Add&Link),this);addLinkAction-set

37、Icon(QIcon(:/images/link.png);addLinkAction-setShortcut(tr(Ctrl+L);connect(addLinkAction,SIGNAL(triggered(),this,SLOT(addLink();deleteAction=newQAction(tr(&Delete),this);deleteAction-setIcon(QIcon(:/images/delete.png);deleteAction-setShortcut(tr(Del);connect(deleteAction,SIGNAL(triggered(),this,SLOT

38、(del();cutAction=newQAction(tr(Cu&t),this);cutAction-setIcon(QIcon(:/images/cut.png);cutAction-setShortcut(tr(Ctrl+X);connect(cutAction,SIGNAL(triggered(),this,SLOT(cut();copyAction=newQAction(tr(&Copy),this);copyAction-setIcon(QIcon(:/images/copy.png);copyAction-setShortcut(tr(Ctrl+C);connect(copyA

39、ction,SIGNAL(triggered(),this,SLOT(copy();pasteAction=newQAction(tr(&Paste),this);pasteAction-setIcon(QIcon(:/images/paste.png);pasteAction-setShortcut(tr(Ctrl+V);connect(pasteAction,SIGNAL(triggered(),this,SLOT(paste();bringToFrontAction=newQAction(tr(Bringto&Front),this);bringToFrontAction-setIcon

40、(QIcon(:/images/bringtofront.png);connect(bringToFrontAction,SIGNAL(triggered(),this,SLOT(bringToFront();sendToBackAction=newQAction(tr(&SendtoBack),this);sendToBackAction-setIcon(QIcon(:/images/sendtoback.png);connect(sendToBackAction,SIGNAL(triggered(),this,SLOT(sendToBack();propertiesAction=newQA

41、ction(tr(P&roperties.),this);connect(propertiesAction,SIGNAL(triggered(),this,SLOT(properties();voidDiagramWindow:createMenus()fileMenu=menuBar()-addMenu(tr(&File);fileMenu-addAction(exitAction);editMenu=menuBar()-addMenu(tr(&Edit);editMenu-addAction(addNodeAction);editMenu-addAction(addLinkAction);

42、editMenu-addAction(deleteAction);editMenu-addSeparator();editMenu-addAction(cutAction);editMenu-addAction(copyAction);editMenu-addAction(pasteAction);editMenu-addSeparator();editMenu-addAction(bringToFrontAction);editMenu-addAction(sendToBackAction);editMenu-addSeparator();editMenu-addAction(propert

43、iesAction);voidDiagramWindow:createToolBars()editToolBar=addToolBar(tr(Edit);editToolBar-addAction(addNodeAction);editToolBar-addAction(addLinkAction);editToolBar-addAction(deleteAction);editToolBar-addSeparator();editToolBar-addAction(cutAction);editToolBar-addAction(copyAction);editToolBar-addActi

44、on(pasteAction);editToolBar-addSeparator();editToolBar-addAction(bringToFrontAction);editToolBar-addAction(sendToBackAction);voidDiagramWindow:setZValue(intz)Node*node=selectedNode();if(node)node-setZValue(z);voidDiagramWindow:setupNode(Node*node)node-setPos(QPoint(80+(100*(seqNumber%5),80+(50*(seqN

45、umber/5)%7);scene-addItem(node);+seqNumber;scene-clearSelection();node-setSelected(true);bringToFront();/返回一个选择的节点Node*DiagramWindow:selectedNode()constQListitems=scene-selectedItems();/全部选择的节点if(items.count()=1)returndynamic_cast(items.first();elsereturn0;Link*DiagramWindow:selectedLink()constQList

46、items=scene-selectedItems();if(items.count()=1)returndynamic_cast(items.first();elsereturn0;/返回选择的节点对DiagramWindow:NodePairDiagramWindow:selectedNodePair()constQListitems=scene-selectedItems();if(items.count()=2)Node*first=dynamic_cast(items.first();Node*second=dynamic_cast(items.last();if(first&sec

47、ond)returnNodePair(first,second);returnNodePair();/propertiesdialog.h#ifndefPROPERTIESDIALOG_H#definePROPERTIESDIALOG_H#includeui_propertiesdialog.hclassNode;classPropertiesDialog:publicQDialog,privateUi:PropertiesDialogQ_OBJECTpublic:PropertiesDialog(Node*node,QWidget*parent=0);privateslots:voidon_

48、buttonBox_accepted();/快速信号连接voidon_textColorButton_clicked();voidon_outlineColorButton_clicked();voidon_backgroundColorButton_clicked();private:voidupdateColorLabel(QLabel*label,constQColor&color);voidchooseColor(QLabel*label,QColor*color);Node*node;QColortextColor;QColoroutlineColor;QColorbackgroun

49、dColor;#endif/propertiesdialog.cpp#include#includenode.h#includepropertiesdialog.hPropertiesDialog:PropertiesDialog(Node*node,QWidget*parent):QDialog(parent)setupUi(this);this-node=node;xSpinBox-setValue(int(node-x();ySpinBox-setValue(int(node-y();textLineEdit-setText(node-text();textColor=node-text

50、Color();outlineColor=node-outlineColor();backgroundColor=node-backgroundColor();updateColorLabel(outlineColorLabel,outlineColor);updateColorLabel(backgroundColorLabel,backgroundColor);updateColorLabel(textColorLabel,textColor);voidPropertiesDialog:on_buttonBox_accepted()node-setPos(xSpinBox-value(),

51、ySpinBox-value();node-setText(textLineEdit-text();node-setOutlineColor(outlineColor);node-setBackgroundColor(backgroundColor);node-setTextColor(textColor);node-update();QDialog:accept();voidPropertiesDialog:on_textColorButton_clicked()chooseColor(textColorLabel,&textColor);voidPropertiesDialog:on_ou

52、tlineColorButton_clicked()chooseColor(outlineColorLabel,&outlineColor);voidPropertiesDialog:on_backgroundColorButton_clicked()chooseColor(backgroundColorLabel,&backgroundColor);voidPropertiesDialog:updateColorLabel(QLabel*label,constQColor&color)QPixmappixmap(16,16);pixmap.fill(color);label-setPixma

53、p(pixmap);voidPropertiesDialog:chooseColor(QLabel*label,QColor*color)QColornewColor=QColorDialog:getColor(*color,this);if(newColor.isValid()*color=newColor;updateColorLabel(label,*color);Qt学习笔记-图形视图框架(二)2010-07-1107:41/demo:城市地图/主要特点:/滚动和缩放:鼠标滚动,放大或者缩小地图/键盘操作:上下左右,PageUp,PageDown/自定义视图,自定义图元/显示注解/ci

54、tyscape.h#ifndefCITYSCAPE_H#defineCITYSCAPE_H#includeclassQGraphicsScene;classCityView;classCityscape:publicQMainWindowQ_OBJECTpublic:Cityscape();private:voidgenerateCityBlocks();QGraphicsScene*scene;CityView*view;#endif/cityscape.cpp#include#includeannotation.h#includecityblock.h#includecityscape.h

55、#includecityview.hCityscape:Cityscape()scene=newQGraphicsScene(-22.25,-22.25,1980,1980);scene-setBackgroundBrush(QColor(255,255,238);generateCityBlocks();view=newCityView;view-setScene(scene);setCentralWidget(view);setWindowTitle(tr(Cityscape);voidCityscape:generateCityBlocks()QSetnames;namesAdamsAg

56、newArthurBreckinridgeBuchananBurrBushCalhounCarterCheneyClevelandClintonColfaxCoolidgeCurtisDallasDawesEisenhowerFairbanksFillmoreFordGarfieldGarnerGerryGoreGrantHamlinHardingHarrisonHayesHendricksHobartHooverHumphreyJacksonJeffersonJohnsonKennedyKingLincolnMadisonMarshallMcKinleyMondaleMonroeMorton

57、NixonPiercePolkQuayleReaganRockefellerRooseveltShermanStevensonTaftTaylorTompkinsTrumanTylerVanBurenWallaceWashingtonWheelerWilson;QSetIteratori(names);for(inty=0;y44;+y)for(intx=0;x20&x20&y18&x18&y15&x15&y29)percentile=std:rand()%(std:rand()%5!=0?10:100);elsepercentile=std:rand()%100;CityBlock:Kind

58、kind;QStringname;if(percentile=0)kind=CityBlock:Park;name=tr(%1Park);elseif(percentile=2)kind=CityBlock:SmallBuilding;elseif(percentile=4)kind=CityBlock:Hospital;name=tr(%1Hospital);elseif(percentile=5)kind=CityBlock:Hall;name=tr(%1Hall);elseif(percentile=7)kind=CityBlock:Building;name=tr(%1Bldg);el

59、seif(percentile=9)kind=CityBlock:Tower;name=tr(%1Tower);elseif(percentile=15)kind=CityBlock:LShapedBlock;elseif(percentile=30)kind=CityBlock:LShapedBlockPlusSmallBlock;elseif(percentilesetPos(QPointF(x*44.5,y*44.5);scene-addItem(block);if(!name.isEmpty()if(!i.hasNext()i.toFront();boolmajor=(std:rand

60、()%10=0);Annotation*annotation=newAnnotation(name.arg(i.next(),major);annotation-setPos(block-pos();scene-addItem(annotation);/cityblock.h自定义图元#defineCITYBLOCK_H#include#include#includeclassQGradient;classCityBlock:publicQGraphicsItempublic:enumKindPark,SmallBuilding,Hospital,Hall,Building,Tower,LSh

温馨提示

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

评论

0/150

提交评论