需要重写绘图事件函数void Widget::paintEvent(QPaintEvent *event);
//创建画家
QPainter painter(this); //this指的是绘画至当前界面
//创建画笔
QPen pen(QColor(255,0,0));
//设置笔的宽度
pen.setWidth(1);
//设置画笔的样式
pen.setStyle(Qt::CustomDashLine);
//创建画刷
QBrush brush(Qt::cyan);
brush.setStyle(Qt::Dense5Pattern);
//画家拿起画刷
painter.setBrush(brush);
//画家拿起笔
painter.setPen(pen);
//画家作画
//画线
painter.drawLine(QPoint(0,0),QPoint(100,100));
//画圆
painter.drawEllipse(QPoint(100,100),50,50);
//画矩形
painter.drawRect(50,50,50,50); //左上角点坐标x,y,宽,高
//画字
painter.setFont(QFont("华文彩云",20));
painter.drawText(QRect(0,200,100,100),"好好学习,天天向上");
//创建画家
QPainter painter(this); //this指的是绘画至当前界面
painter.drawEllipse(QPoint(250,100),50,50);
//抗锯齿效果
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QPoint(100,100),50,50);
painter.drawRect(QRect(20,20,50,50));
//移动画家 参数是移动的距离
painter.translate(100,0);
painter.save(); //保存当前状态
painter.drawRect(QRect(20,20,50,50));
painter.translate(100,0);
painter.restore(); //恢复之前的状态
painter.drawRect(QRect(20,20,50,50));
图片按钮向右移动和自动向右移动的实现(移动到窗口最右侧时从左侧出现)
this->posX = 0;
connect(ui->btn_move,&QPushButton::clicked,[=](){
this->posX += 10;
update(); //重新执行绘画事件中的代码,意为更新绘图
});
//使用定时器事件类实现图片的自动移动
QTimer *timer = new QTimer(this);
timer->start(10);
connect(timer,&QTimer::timeout,[=](){
this->posX += 2;
update();
});
//使用画家画成品图片
QPixmap pix;
pix.load(":/Image/Luffy.png");
//判断图片从右边移出窗口后,使其从左边进来
//this->width()代表当前窗口的宽度
if(posX > this->width())
{
posX = -pix.width();
}
painter.drawPixmap(this->posX,0,pix);
QPixmap,QBitmap,QImage,QPicture,QWidget
QPixmap:对不同的平台做了显示的优化
//QPixmap绘图设备 对不同的平台做了显示的优化
//创建一个画布
QPixmap pix(300,300);
//设置背景色
pix.fill(Qt::white);
QPainter painter(&pix); //指定painter绘画到pix上
painter.setPen(QPen(Qt::green));
painter.drawEllipse(QPoint(150,150),50,50);
pix.save("C:/Users/wwww/Desktop/pix.png"); //将画的图保存到指定位置
QImage:专门为像素的访问做了优化
//QImage做绘图设备 专门为像素的访问做了优化
QImage img(300,300,QImage::Format_RGB32); //第三个参数是QImage的Format参数,查询帮助即可
img.fill(Qt::white);
QPainter painter(&img);
painter.setPen(QPen(Qt::blue));
painter.drawEllipse(QPoint(150,150),50,50);
img.save("C:/Users/wwww/Desktop/img.png");
//修改像素点
QPainter painter(this);
QImage img;
img.load(":/Image/Luffy.png");
for(int i=50 ;i<100 ;++i)
{
for(int j = 50 ;j<100 ;++j)
{
//对像素点进行绘图,使用img.setPixel需要第三个参数是QRgb代表要绘制的内容(颜色等等)
//QRgb val = qRgb(255,0,0);
QRgb val = img.pixel(j,i); //对角线反转
img.setPixel(i,j,val);
}
}
painter.drawImage(100,0,img);
Picture:记录和重现画家的命令
//QPicture做绘图设备 记录和重现画家的命令
QPicture pic;
QPainter painter;
//开始进行记录:开始需要参数
painter.begin(&pic);
painter.setPen(QPen(Qt::red));
painter.drawEllipse(QPoint(150,150),50,50);
//结束记录:结束不需要参数
painter.end();
pic.save("C:/Users/wwww/Desktop/pic.wxl"); //文件名和后缀可自行随意指定
//解析QPicture文件,重现画家操作
QPicture pic;
pic.load("C:/Users/wwww/Desktop/pic.wxl");
painter.drawPicture(100,0,pic);
添加一个按钮,点击按钮弹出文件选择对话框,选择文件后在lineEdit中显示绝对路径,在textEidt中显示文件中的文章
QString filePath = QFileDialog::getOpenFileName(this,"选择文件","C:\\Users\\wwww\\Desktop","(*.txt)");
if(filePath.isEmpty())
{
QMessageBox::warning(this,"警告","文件路径不能为空");
}
else
{
ui->lineEdit->setText(filePath);
//读文件
QFile file(filePath);
//设置codec为gbk模式,用于读gbk编码模式的文件
QTextCodec* codec = QTextCodec::codecForName("gbk");
//打开文件
file.open(QIODevice::ReadOnly);
//从文件中读数据
QByteArray arr;
//方法1:一次性读全部内容,返回的是QByteArray类型
//arr = file.readAll();
//方法2:一次读一行
while(!file.atEnd())
{
arr += file.readLine();
}
//默认读的模式是utf-8的
ui->textEdit->setText(arr);
//读gbk模式的
//ui->textEdit->setText(codec->toUnicode(arr));
//关闭文件
file.close();
//写文件
file.open(QIODevice::Append);
file.write("啊啊啊啊啊啊啊啊");
file.close();
QFileInfo info(filePath);
qDebug() << "文件名:" << info.fileName().toUtf8().data() << "后缀名:" << info.suffix() << "文件路径:" << info.filePath() << "文件大小:" << info.size();
qDebug() << "创建日期:" << info.created().toString("yyyy/mm/dd hh:mm:ss")
<< "最后的修改日期" << info.lastModified().toString("yyyy/mm/dd hh:mm:ss") ;