十八、Qt 2D绘图(八)涂鸦板(2011-4-6).docVIP

  • 2
  • 0
  • 约3.85千字
  • 约 11页
  • 2016-08-28 发布于河南
  • 举报
十八、Qt 2D绘图(八)涂鸦板(2011-4-6)

十八、Qt 2D绘图(八)涂鸦板 上面一节我们深入分析了一下Qt的坐标系统,这一节我们在前面程序的基础上稍加改动,设计一个涂鸦板程序。 简单的涂鸦板: 1.我们再在程序中添加函数。 我们在dialog.h里的public中再添加鼠标移动事件和鼠标释放事件的函数声明: void mouseMoveEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *); 在private中添加变量声明: QPixmap pix; QPoint lastPoint; QPoint endPoint; 因为在函数里声明的QPixmap类对象是临时变量,不能存储以前的值,所以为了实现保留上次的绘画结果,我们需要将其设为全局变量。 后两个QPoint变量存储鼠标指针的两个坐标值,我们需要用这两个坐标值完成绘图。 2.在dialog.cpp中进行修改。 在构造函数里进行变量初始化。 resize(600,500);??? //窗口大小设置为600*500 pix = QPixmap(200,200); pix.fill(Qt::white); 然后进行其他几个函数的定义: void Dialog::paintEvent(QPaintEvent *) {?? ??? QPainter pp(pix); ??? pp.drawLine(lastPoint,endPoint);?? //根据鼠标指针前后两个位置就行绘制直线 ??? lastPoint = endPoint;?? //让前一个坐标值等于后一个坐标值,这样就能实现画出连续的线 ??? QPainter painter(this); ??? painter.drawPixmap(0,0,pix); } void Dialog::mousePressEvent(QMouseEvent *event) { ??? if(event-button()==Qt::LeftButton) //鼠标左键按下 ??????? lastPoint = event-pos(); } void Dialog::mouseMoveEvent(QMouseEvent *event) { ??? if(event-buttons()Qt::LeftButton) //鼠标左键按下的同时移动鼠标 ??? { ??????? endPoint = event-pos(); ??????? update(); ??? } } void Dialog::mouseReleaseEvent(QMouseEvent *event) { ??? if(event-button() == Qt::LeftButton) //鼠标左键释放 ??? { ??????? endPoint = event-pos(); ??????? update(); ??? } } 这里的update()函数,是进行界面重绘,执行该函数时就会执行那个重绘事件函数。 3.这时运行程序,效果如下。(点击图片可将其放大) ? ? 这样简单的涂鸦板程序就完成了。下面我们进行放大后的涂鸦。 放大后再进行涂鸦: 1.添加放大按钮。 在dialog.h中添加头文件声明: #include QPushButton 在private中添加变量声明: int scale; QPushButton *pushBtn; 然后再在下面写上按钮的槽函数声明: private slots: ??? void zoomIn(); 2.在dialog.cpp中进行更改。 在构造函数里添加如下代码: scale =1;?? //设置初始放大倍数为1,即不放大 pushBtn = new QPushButton(this); //新建按钮对象 pushBtn-setText(tr(“zoomIn”));?? //设置按钮显示文本 pushBtn-move(500,450);??? //设置按钮放置位置 connect(pushBtn,SIGNAL(clicked()),this,SLOT(zoomIn())); //对按钮的单击事件和其槽函数进行关联 这里我们利用代码添加了一个按钮对象,用它来实现放大操作。 再在构造函数以外进行zoomIn()函数的定义: void Dialog::zoomIn() //按钮单击事件的槽函数 { ??? scale *=2; ??? update(); } 3.通过上一节的学习,我们应该已经知道想让画布的内容放大有两个办法,一个是直接放大画布的坐标,一个是放大窗口的坐标。 我们主要讲解放大窗口坐标。 void Dialog::paintEvent(QPaintEvent *) {?? ??? QPa

文档评论(0)

1亿VIP精品文档

相关文档