专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

第17篇2D绘图(七)涂鸦板

  导语
  通过前面几节的学习,大家应该已经对Qt中2D绘图有了一定的认识,这一节我们将应用前面讲到的内容,编写一个简单的涂鸦板程序,这一节只是实现最基本的鼠标画线功能。
  环境:WindowsXpQt4。8。4QtCreator2。6。2目录一、实现涂鸦板二、实现放大功能正文
  一、实现涂鸦板
  1新建QtGui应用,项目名称为pianter3,基类这次还用QDialog,类名保持Dialog不变即可。
  2到dialog。h文件中,先添加头文件包含:include
  然后添加几个函数的声明:protected:voidpaintEvent(QPaintEvent);voidmousePressEvent(QMouseEvent);voidmouseMoveEvent(QMouseEvent);voidmouseReleaseEvent(QMouseEvent);
  第一个是绘制事件处理函数,后面分别是鼠标按下、移动和释放事件的处理函数。
  下面再添加几个private私有变量声明:QPixmappix;QPointlastPoint;QPointendPoint;
  因为在函数里声明的QPixmap类对象是临时变量,不能存储以前的值,为了实现保留上次的绘画结果,我们需要将其设为全局变量。后面两个QPoint变量存储鼠标指针的两个坐标值,我们需要用这两个坐标值完成绘图。
  2到dialog。cpp文件中,先添加头文件包含:include
  然后在构造函数中添加如下初始代码:resize(600,500);窗口大小设置为600500pixQPixmap(200,200);pix。fill(Qt::white);
  下面添加几个函数的定义:voidDialog::paintEvent(QPaintEvent){QPainterpp(pix);根据鼠标指针前后两个位置就行绘制直线pp。drawLine(lastPoint,endPoint);让前一个坐标值等于后一个坐标值,这样就能实现画出连续的线lastPointendPoint;QPainterpainter(this);painter。drawPixmap(0,0,pix);}
  这里使用了两个点来绘制线条,这两个点在下面的鼠标事件中获得。voidDialog::mousePressEvent(QMouseEventevent){if(eventbutton()Qt::LeftButton)鼠标左键按下lastPointeventpos();}
  当鼠标左键按下时获得开始点。voidDialog::mouseMoveEvent(QMouseEventevent){if(eventbuttons()Qt::LeftButton)鼠标左键按下的同时移动鼠标{endPointeventpos();update();进行绘制}}
  当鼠标移动时获得结束点,并更新绘制。调用update()函数会执行paintEvent()函数进行重新绘制。voidDialog::mouseReleaseEvent(QMouseEventevent){if(eventbutton()Qt::LeftButton)鼠标左键释放{endPointeventpos();update();}}
  当鼠标按键释放时也进行重绘。
  现在运行程序,使用鼠标在白色画布上进行绘制,发现已经实现了简单的涂鸦板功能,效果如下图所示。
  二、实现放大功能
  前面已经实现了简单的绘制功能,下面我们将实现放大功能,将画布放大后继续进行涂鸦。这里将使用两种方法来实现,也是对上一节坐标系统后面的问题的更进一步的应用实践。
  1添加放大按钮。到dialog。h文件中,先添加头文件:includeQPushButton
  然后添加下面private私有变量声明:qrealscale;QPushButtonbutton;
  最后再添加一个私有槽声明:privateslots:voidzoomIn();
  2到dialog。cpp文件中,先在构造函数中添加如下代码:设置初始放大倍数为1,即不放大scale1;新建按钮对象buttonnewQPushButton(this);设置按钮显示文本buttonsetText(tr(zoomIn));设置按钮放置位置buttonmove(500,450);对按钮的单击事件和其槽函数进行关联connect(button,SIGNAL(clicked()),this,SLOT(zoomIn()));
  这里使用代码创建了一个按钮对象,并将其单击信号关联到了放大槽上,也就是说按下这个按钮,就会执行zoomIn()槽。
  3下面添加zoomIn()的定义:voidDialog::zoomIn(){scale2;update();}
  这里我们让每按下这个按钮,放大值都扩大两倍。后面调用update()函数来更新显示。
  4通过上一节的学习,我们应该已经知道想让画布的内容放大有两个办法,一个是直接放大画布的坐标系统,一个是放大窗口的坐标系统。下面我们先来放大窗口的坐标系统。更改paintEvent()函数如下:voidDialog::paintEvent(QPaintEvent){QPainterpp(pix);pp。drawLine(lastPoint,endPoint);lastPointendPoint;QPainterpainter(this);进行放大操作painter。scale(scale,scale);painter。drawPixmap(0,0,pix);}
  现在运行程序,先在白色画布上任意绘制一个图形,效果如下图所示。
  然后按下zoomIn按钮,效果如下图所示。
  现在再用鼠标进行绘制,发现图形已经不能和鼠标轨迹重合了,效果如下图所示。
  有了前面一节的知识,就不难理解出现这个问题的原因了。窗口的坐标扩大了,但是画布的坐标并没有扩大,而我们画图用的坐标值是鼠标指针的,鼠标指针又是获取的窗口的坐标值。现在窗口和画布的同一点的坐标并不相等,所以就出现了这样的问题。
  其实解决办法很简单,窗口放大了多少倍,就将获得的鼠标指针的坐标值缩小多少倍就行了。我们将paintEvent()函数更改如下:voidDialog::paintEvent(QPaintEvent){QPainterpp(pix);pp。drawLine(lastPointscale,endPointscale);lastPointendPoint;QPainterpainter(this);painter。scale(scale,scale);painter。drawPixmap(0,0,pix);}
  运行程序,效果如下图所示。可以看到,已经能够在放大以后继续绘图了。
  这种用改变窗口坐标大小来改变画布面积的方法,实际上是有损图片质量的。就像将一张位图放大一样,越放大越不清晰。原因就是,它的像素的个数没有变,如果将可视面积放大,那么单位面积里的像素个数就变少了,所以画质就差了。
  5方法二。扩大画布坐标系统。先将paintEvent()更改如下:voidDialog::paintEvent(QPaintEvent){QPainterpp(pix);pp。scale(scale,scale);pp。drawLine(lastPoint,endPoint);lastPointendPoint;QPainterpainter(this);painter。drawPixmap(0,0,pix);}
  这时运行程序,先进行绘制,然后点击zoomIn按钮,发现以前的内容并没有放大,而当我们再次绘画时,发现鼠标指针和绘制的线条又不重合了。效果如下图所示。
  这并不是我们想要的结果,为了实现按下放大按钮,画布和图形都进行放大,我们可以使用缓冲画布(就是一个辅助画布)来实现。将paintEvent()函数内容更改如下。voidDialog::paintEvent(QPaintEvent){if(scale!1)如果进行放大操作{临时画布,大小变化了scale倍QPixmapcopyPix(pix。size()scale);QPainterpter(Pix);pter。scale(scale,scale);将以前画布上的内容复制到现在的画布上pter。drawPixmap(0,0,pix);将放大后的内容再复制回原来的画布上pixcopyPix;让scale重新置1scale1;}QPainterpp(pix);pp。scale(scale,scale);pp。drawLine(lastPointscale,endPointscale);lastPointendPoint;QPainterpainter(this);painter。drawPixmap(0,0,pix);}
  现在运行程序,效果如下图所示。
  结语
  本节讲到的涂鸦板,只是为了实践前面的知识,起到抛砖引玉的作用。大家可以根据自己的理解继续探究下去。在下一节,我们将讲解怎样在涂鸦板上绘制出矩形、椭圆等图形。

乡村散文英雄鼎爷七十六了,经常给我讲他当年打仗的故事,只见他的唾沫星子乱溅,我在旁边却听得津津有味。在我的眼里,鼎爷就是顶天立地的大英雄,他和古代战将一样在沙场上威风凛凛,奋勇杀敌,不畏生死。因果12条,我条条都信!来源网络01hr付出越多,福报越多生活不会像你想象的那么好,也不会如你设想的那么遭。每当事情到达一定的糟糕程度时,我会发现天无绝人之路。老天是公平的,你走的每一步,都算数,上天不会一个人到了60岁,有幸遇到这些迹象,那是来渡你的所谓五十而知天命,六十而耳顺,七十而从心所欲,不逾矩。一个人,如果知晓了自己的命数,那他就会做出改变。等到了晚年,他整个人都会变得豁达随心所欲起来,越活越趋向于自然。老子所认为的返不服,不要,不怕,不羁不懈,不屈不挠,不卑不亢从乖,摸摸头追到我不,再到现在阅读的你坏,大冰哥给我带来的思考远感动多,谢谢!古人有云居庙堂之高则忧其民,处江湖之远则忧其君。达则兼济天下,穷则独善其身,您都做到了。您从来不会特别文案那些讽刺性极强的哲理句子(建议收藏)1。人们相互蔑视,又相互奉承,人们各自希望自己高于别人,又各自匍匐在别人面前。马克奥勒留沉思录2。大家都愿意盲从,好像世界上最安全的事就是让自己消失在多数之中。李娟冬牧场3。乞丐不晚餐不知吃什么,就做它吧,有菜有汤,简单营养又好吃下班到家,又累又饿,没有太多的时间,也没有好的心情做大餐。所以简单快手饭菜是最好的选择。我通常会煮一锅汤,多种食材一锅出的那种,省心省事,吃着滋润又暖和。今天晚餐就煮了这样的一锅汤正月十五闹元宵,元宵家宴不可少,这10道家常菜,幸福团圆一整年头条创作挑战赛大家好,欢迎大家来到我的美食自媒体,我是美食领域创作者锦绣V山东专注美食,让生活更有味。今天为大家带来了几道家常美食的做法,这几道美食也是深受大家的喜欢,而且是很常见红白相间的心太软用这两样就能做,香甜软糯劲道,视觉味觉超满足大家好,我是Allie,美好的一天从营养早餐开始,吃好早餐,一整天都精力充沛。早餐吃好午餐吃饱晚餐吃少,低油低盐清淡饮食,这是我多年的习惯,希望和朋友们一起吃出健康吃出美丽吃出好身老手艺新门道随着元宵佳节的临近,汤圆元宵等节令产品也开始进入了热销阶段。近日北京稻香村锦芳小吃各门店推出的现摇元宵吸引了许多顾客驻足购买。据介绍,今年锦芳小吃元宵备货量在48万至53万斤,比去春天到了,常吃莴苣对身体好处多,分享炒莴苣脆爽好吃的小诀窍春天到了,常吃莴苣对身体好处多,分享炒莴苣脆爽好吃的小诀窍。今日立春吃什么好呢?分享一道清脆爽口的莴苣,春天的莴苣又嫩又脆,而且莴苣还有好好吃的名字叫千金菜,可见吃莴苣对身体好处多杏鲍菇这样做,完全释放鲜美筋道!来源昆明日报掌上春城杏鲍菇炖鸡腿原料杏鲍菇3个大鸡腿2个青椒2个玉米油适量姜适量干红辣椒适量花椒适量盐适量生抽适量蚝油适量麻辣火锅底料适量小葱一根蒜适量做法步骤1。杏鲍菇切滚刀块,
民间故事媚娘故事发生在北宋大观年间,在白云乡有座寺庙,名为白云寺。相传白云寺供奉着一颗得道高僧的舍利,且白云寺在慧能方丈的管教下,寺中的一众僧人都很和善,每逢秋收之时,还会主动下山帮附近百姓做清代官服黄马褂的故事从电影九品芝麻官看清朝服饰马褂是清代服饰的一种,其中黄色马褂是具有极高荣誉感的一种马褂,这种具有皇权象征的服饰,在清宫剧中常见。今天来说下九品芝麻官这部老电影里出现的一件黄马褂。1994年老电影九品芝麻官,因为这笔暗戳戳的交易,苹果跟亚马逊被好几个国家给盯上了今天苹果跟亚马逊又被卷入了一场反垄断诉讼中。不过这次被诉讼的由头还挺有意思这两巨头被指控合谋抬高iPhone跟iPad的价格。哎?这啥意思,难不成咱买不到低价iPhone,是这哥俩美媒FTX交易公司申请破产,加密货币之王跌落神坛来源环球时报环球时报综合报道据美国有线电视新闻网(CNN)14日报道,全球最大加密货币交易平台之一FTX交易公司已于11日申请破产,短短几天内,山姆班克曼弗里德从加密货币之王沦落到换壳新形态智能手表袭来!华为和玺佳引领智能手表新时尚强大的信息功能健康管理服务运动时尚功能使用和佩戴方便等方面,让智能手表在现代高科技产品里脱颖而出,尤其是深受年轻人的喜爱,甚至逐渐代替了智能手机慢慢成为日常的交流工具。不过大多数的iOS微信发布更新,7个新改变,值得升级11月14日,iOS版本的微信更新到了v8。0。30版本。更新日志还是一如既往地显示解决了一些已知问题,并没有提供其它的更新信息。不过更新之后,实际体验下来这次的微信新版本还是有非甘蔗高贵种和割手密种种间特异微卫星标记的全基因组开发微卫星分子标记(SSR)因具有共显性高度重复性高度丰富性的多态性等优点,已成为构建遗传连锁图谱研究群体遗传学进行分子标记辅助育种系谱分析品种指纹图谱绘制品种纯度检测和目标性状分子标无货源电商是割韭菜模式吗?伴随手机端拼购短视频电商日渐火热,打着零基础低成本月入过万元口号的无货源电商模式吸引了不少人投资,然而,一些人交了培训费后却直呼被割韭菜。记者调查发现,无货源网店模式不仅会导致商品关注鸿海明年扩大电动汽车版图,ModelC交付纳智捷销售文懂车帝原创邢秋鸿懂车帝原创行业近日,鸿海集团公布了2022年第三季度财报。数据显示,三季度,鸿海税后净利润为387。59亿元新台币(约合人民币88。37亿元),同比去年增长5,创歌尔股份还能解套吗?事件内容歌尔股份于近日收到境外某大客户通知,暂停生产其一款智能声学整机产品,据歌尔股份公告回复,此次事件对2022年收入的影响将不超出33亿元,占上一年度收入的4。2。此产品根据推2022世界VR产业大会华为生态论坛在南昌前湖迎宾馆举行11月13日上午,2022世界VR产业大会华为生态论坛在南昌前湖迎宾馆举行。本次论坛邀请了华为公司VRAR产业线专家,以及来自海内外的虚拟现实标准技术内容制作应用开发网络传输等领域
友情链接:快好知快生活快百科快传网中准网文好找聚热点快软网