⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scribble.cpp

📁 《Linux程序设计权威指南》一书qt下的源码
💻 CPP
字号:
#include "scribble.h"#include <qapplication.h>#include <qpen.h>#include <qpainter.h>#include <qpixmap.h>#include <qwidget.h>ScribbleDemo::ScribbleDemo(){	//设置透明色背景	setBackgroundMode( NoBackground );}//当鼠标指针按下时, 记录鼠标位置void ScribbleDemo::mousePressEvent( QMouseEvent* event ){	last = event->pos();	pen = QPen(Qt::red, 3);}//当鼠标指针移动时, 同时在组件和缓冲区内画图void ScribbleDemo::mouseMoveEvent( QMouseEvent* event ){	//建立两个画笔, 一个用于窗口, 一个用于缓冲区	QPainter windowpainter;	QPainter bufferpainter;	//开始	windowpainter.begin( this );	bufferpainter.begin( &buffer );	//设置红色的笔, 宽度为三个像素	windowpainter.setPen( pen );	bufferpainter.setPen( pen );	windowpainter.drawLine( last, event->pos() );	bufferpainter.drawLine( last, event->pos() );	//结束	windowpainter.end();	bufferpainter.end();	//记录位置	last = event->pos();}//当需要重绘时, 把缓冲区内的内容拷贝到窗口中void ScribbleDemo::paintEvent( QPaintEvent* event ){	bitBlt( this, 0, 0, &buffer );}//当窗口尺寸改变时, 使得缓冲区的内容总是和窗口尺寸一样大.//为了不丢失信息, 把缓冲区保存起来, 然后改变缓冲区的大小, //再把保存的内容拷贝当缓冲区中.void ScribbleDemo::resizeEvent( QResizeEvent* event ){	int w = width() > buffer.width() ?  width() : buffer.width();	int h = height() > buffer.height() ?  height() : buffer.height();	QPixmap tmp( buffer );	buffer.resize( w, h );	buffer.fill( colorGroup().base() );	bitBlt( &buffer, 0, 0, &tmp, 0, 0, tmp.width(), tmp.height() );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -