临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

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

10月2日 夜如影投稿
  导语
  通过前面几节的学习,大家应该已经对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私有变量声明:QPQPointlastPQPointendP
  因为在函数里声明的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);让前一个坐标值等于后一个坐标值,这样就能实现画出连续的线lastPointendPQPainterpainter(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私有变量声明:QPushB
  最后再添加一个私有槽声明: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);lastPointendPQPainterpainter(this);进行放大操作painter。scale(scale,scale);painter。drawPixmap(0,0,pix);}
  现在运行程序,先在白色画布上任意绘制一个图形,效果如下图所示。
  然后按下zoomIn按钮,效果如下图所示。
  现在再用鼠标进行绘制,发现图形已经不能和鼠标轨迹重合了,效果如下图所示。
  有了前面一节的知识,就不难理解出现这个问题的原因了。窗口的坐标扩大了,但是画布的坐标并没有扩大,而我们画图用的坐标值是鼠标指针的,鼠标指针又是获取的窗口的坐标值。现在窗口和画布的同一点的坐标并不相等,所以就出现了这样的问题。
  其实解决办法很简单,窗口放大了多少倍,就将获得的鼠标指针的坐标值缩小多少倍就行了。我们将paintEvent()函数更改如下:voidDialog::paintEvent(QPaintEvent){QPainterpp(pix);pp。drawLine(lastPointscale,endPointscale);lastPointendPQPainterpainter(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);lastPointendPQPainterpainter(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);将放大后的内容再复制回原来的画布上pixcopyP让scale重新置1scale1;}QPainterpp(pix);pp。scale(scale,scale);pp。drawLine(lastPointscale,endPointscale);lastPointendPQPainterpainter(this);painter。drawPixmap(0,0,pix);}
  现在运行程序,效果如下图所示。
  结语
  本节讲到的涂鸦板,只是为了实践前面的知识,起到抛砖引玉的作用。大家可以根据自己的理解继续探究下去。在下一节,我们将讲解怎样在涂鸦板上绘制出矩形、椭圆等图形。
投诉 评论

过年别总吃大鱼大肉,8道素菜记得端上桌,简单易做,家人都爱吃大家好,这里是小慧今天说美食,距离春节的脚步越来越近了,春节是我们每年农历的正月初一,春节也是中国一个很重要的节日,辞旧迎新,寄托着新的一年的到来人们对美好生活的期盼,春节的节……低成本实现电脑远程开机,只需一个插线板就能搞定,如何操作?上个月我买了一台迷你主机,平时放在家里办公、当下载机使用。这款迷你主机只有电视盒子差不多,取代了笨重的台式机,省下了不小的空间,让书房看起来也更整洁了。由于工作需要,我经常外出……超赞,iPhone15ProMax概念图曝光,友商只能望洋兴众所周知,一个具备强大研发实力和创新能力的手机厂商,就一定会有很好的未来,就一定能带来体验卓越的产品,而苹果手机就是这样一个手机厂商。苹果手机作为行业里一个闻名遐迩的手机厂商,……景甜终于不藏了,穿无痕套装秀好身材,长靴拉到大腿根超时髦头条创作挑战赛优雅知性的穿搭,固然是美好的。但是太过中规中矩的风格,总是经不起任何的涟漪,也无法让大众心动。有时候别出心裁的穿搭,才会聚焦更多关注,让大众过目难忘。……稳经济政策效应逐步释放经济增速有望持续回升国家发展改革委就当新华社北京12月16日电题:稳经济政策效应逐步释放经济增速有望持续回升国家发展改革委就当前经济运行热点介绍情况新华社记者潘洁如何看待当前经济形势?保暖保供、重要民生……第17篇2D绘图(七)涂鸦板导语通过前面几节的学习,大家应该已经对Qt中2D绘图有了一定的认识,这一节我们将应用前面讲到的内容,编写一个简单的涂鸦板程序,这一节只是实现最基本的鼠标画线功能。环……人生只有一次,请别再等待!我们好像一直都在等待,等着下次,等着不忙的时候,等将来某一天,等缘分来临,等机会到来,等变得有钱,等变得优秀。等到最后,什么都没等来,却浪费了时间,留下了满满的遗憾,你等……近期我家最爱做的桂花酒酿做麻薯酥糯叽叽酥掉渣又香又拉丝一进入这个季节,桂花酒酿的各式甜点就多了起来,再加一点糯叽叽和酥掉渣的元素,符合这个标准的当属这个桂花酒酿麻薯酥,内核是糯叽叽的麻薯,外面是一层桂花酒酿豆沙,又酥香又拉丝。……为什么是杭州?导语:杭州这座古老的城市,是如何在短时间内实现了跳跃式变化和发展的?王剑作者砺石商业评论出品1hr文化名城的华丽转身一千多年前的初夏,在杭州当过刺史的白居易回……半月谈丨小沔煤山尽处有青山小沔:煤山尽处有青山半月谈记者韩振重庆市合川区小沔镇地处嘉陵江支流渠江东岸,风光旖旎可人,却长期守着绿水青山吃煤炭饭。当以生态为代价的发展道路不复通行,小沔痛定思痛……什么时候吃比吃什么更重要黄帝内经曰:法于阴阳,和于术数,饮食有节、起居有常,其中的饮食有节,字面很容易理解,是指日常饮食需要有节制。科学地讲,饮食有节需要从定时、定量两个维度去考虑合理饮食。定时……华伦天奴ROSSO红新春系列Valentino品牌代言人孙俪演绎华伦天奴ROSSO红新春系列,以一抹经典红致敬传统,对话当下,悦启新春盛景。青年演员孙艳身着华伦天奴ROSSO红新春系列,温暖浓郁的红……
银星智能500强供应链智造工厂赋能INXNI以内硬实力据中怡康中国零售数据监测显示,2021年,中国扫地机器人市场规模达108亿元,同比增长22。2,已超越美国成为全球最大市场。在Z经济的影响下,国内扫地机器人市场迎来了高速增长。……卡塔尔世界杯前两周接待游客76。5万,低于预期南都讯记者汪雅云据路透社援引一份来自世界杯主办方卡塔尔织者的游客数据报告显示,自世界杯开幕两周多来,该国一共接待了超过765,000名游客,而这一数字恐怕是低于东道主原本预期的……过了这个年龄,宝宝还在吃手,父母就要注意了,可以试试这样做文:依科育儿1岁之前宝宝吃手都是正常的反应,但是如果宝宝超过2岁还频繁出现吃手现象,父母就要注意了,可以说早引导早好。为什么这么说,难道孩子吃个手还能吃出啥大毛病来……美日之后,中国团队正式官宣,新型光刻机要来了?2022生机大会光刻机是造芯片的设备,要想将精密的芯片图案复刻在晶圆表面,就需要光刻机以照相机的原理进行曝光。不过条条道路通罗马,光刻机的种类也不止一种。美国,日本……奥密克戎变异株变异速度为何如此迅速?中疾控专家回应(抗击新冠肺炎)奥密克戎变异株变异速度为何如此迅速?中疾控专家回应中新网北京9月8日电(记者李纯)近期,中国深圳首现奥密克戎变异株BF。15,哈尔滨首次检出奥密克戎变异株……风吹半夏和虎胆巍城各追2集一个已弃剧,一个会追到底影视剧市场中的竞争从未停止过,撞上档期播出也是常有的事情,这个情况就要看哪部剧的质量更扛打了,就比如当下热播的《卿卿日常》与《爱的二八定律》。前者用笑点不断的剧情和丰满立……小鹏G9和阿维塔11先后上市,它们有什么不同之处?这段时间,高端智能电动汽车领域好不热闹。先是8月8日长安汽车、华为、宁德时代三方合力打造的首款产品阿维塔11上市;再到刚刚作为国产新势力的代表,小鹏推出首款定位为30万以上的高……泰王室有混时尚圈的思凡蕊,而卡塔尔有文艺圈的公主,甚至更壕气泰王室有混时尚圈的思凡蕊,而卡塔尔有文艺圈的公主,甚至更壕气泰国王室有在时尚圈打拼的思凡蕊,而卡塔尔也有涉足文艺圈的公主,甚至还是超壕气的那种。众所周知,泰国王室目前被玛……积目GFbackyard潮流嘉年华来袭打开数字潮玩新思路近日,积目作为官方合作伙伴,受邀参加潮流品牌GREENFRIENDS(GF)举办的2022BACKYARD数字潮流嘉年华(广州站)。GF品牌主理人夏嘉欢惊喜现身,还带来了NBA……美智库预测美国经济2023年萎缩0。5当地时间6日,总部位于华盛顿的知名智库彼得森国际经济研究所发布的半年度经济预测数据显示,美国经济今年将增长1。7,明年将萎缩0。5。彼得森国际经济研究所高级研究员、哈佛大……19投轰25分13助7板!赵继伟梦回巅峰这才是FMVP该有的北京时间12月19日,CBA常规赛第15轮,辽宁队最终以118102击败天津队,结束两连败。此役,赵继伟状态复苏,全场比赛首发出战46分44秒,19投10中,三分球7中5,砍下……48岁杨钰莹胖成大妈,身材发福认不出,昔日性感女神不见踪影说到杨钰莹,对于60后和70后的叔叔阿姨肯定都不陌生,当年她也是女神一般的存在,不仅长相甜美,而且声音也非常地动人,也被称为当时的甜歌天后,活跃在华语乐坛中。如今一晃20……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找