Qt仿音乐播放器:绘画、图片

news/2025/1/3 5:40:16/

一、铺垫

1.Qt中给程序员提供的组件,基本上都是矩形,那如果程序员想画一个三角形和圆形;那就必须要使用绘画类;

二、绘画

注意:关于 paintEvent:paintEvent 会在以下情况下被触发:

1.控件⾸次创建.
2.控件被遮挡, 再解除遮挡.
3.窗⼝最⼩化, 再恢复.
4.控件⼤⼩发⽣变化时.
5.主动调⽤ repaint() 或者 update() ⽅法. (这两个⽅法都是 QWidget 的⽅法)
repaint此函数会立刻调用paintEvent;而update会将paintEvent放入放在事件循环队列中,不会立刻调用绘画事件
在实际开发中的应用:在开发中我们向客服端加载一张图片,事实上已经加载完成,但是开不见图片的样貌,鼠标点一下或者划过去,才会看见图片;这就是绘画事件未更新导致的;如果在开发中如果加载大量的图片或文字,需要及时的刷新一下;

2.1套路

//绘图工作就会放到这里来执行
QPainter painter(this);//定义在栈上的变量,不考虑释放的问题;this不是父对象,而是指定绘画的设                //备(往啥东西上画);
QFont font("微软雅黑",24);
painter.setFont(font);//通过画笔对象QPen设置绘制形状的颜色
//颜色、粗细、样式
QPen pen;
pen.setColor(QColor(255,0,0));//设置成红色的线条
pen.setWidth(5);    //设置线条的粗细
pen.setStyle(Qt::DashLine);//设置线条的样式painter.setPen(pen);    //让painter对象应用pen对象QBrush brush; //创建一个画刷对象
brush.setColor(QColor(0,255,0));
//brush.setStyle(Qt::SolidPattern);
brush.setStyle(Qt::Dense1Pattern);
painter.setBrush(brush);//画一个线段
painter.drawLine(20,20,200,20);
painter.drawLine(QPoint(20,100),QPoint(200,100));
painter.drawLine(20,20,40,40);//画一个矩形
painter.drawRect(10,10,20,20);//前两个参数是左上角的坐标,后两个是宽和高//画一个圆形
painter.drawEllipse(200,200,100,100); //正圆;前两个参数是左上角的坐标,后两个是宽和高
painter.drawEllipse(300,300,100,50); //椭圆;//画一个文字
painter.drawText(100,200,"你好");

2.2画一个多边形

void drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill)

 解释:A QPolygon object is a QVector<QPoint>:这一个多边形对象是一个放在顺序表中的点的集合;所以只需要按照操作Vector来操作就可以

套路:

QPainter painter(this);//建立绘画者对象
//1.设置画笔
painter.setPen(Qt::NoPen);
//2.设置画刷
painter.setBrush(QBrush(Qt::white));
//3.绘制三角形;
QPolygon polygon;
QPoint a(10,300);
QPoint b(10+80,300);
QPoint c(10+40,300+30);
polygon.append(a);  //将三个点添加进去;
polygon.append(b);
polygon.append(c);
painter.drawPolygon(polygon);

 三、图片类

图片类有好多,以我现在的能力,不可能说明白,只是会用一些

3.1设置按钮图标

QPixmap pixmap1("图片路径");
pixmap1=pixmap1.scaled(300,600);//将原来的图片按给的数据进行缩放;并返回
QPushButton* button=new QPushButton(this);
button->setIcon(QIcon(pixmap1));

 此方式设置图标,是为了解决图标太大或太小,与按钮大小不相符的事实;若大小相同,则不会使用如此代码;

3.2使用绘画类操作图片

QPainter painter(this);QPixmap pixmap(":/rose.jpg");
//基础绘制
//painter.drawPixmap(0,0,pixmap);//图片缩放
//painter.drawPixmap(0,0,400,300,pixmap);//在(0,0)点缩放pixmap图片;//图片旋转,本质上是把QPainter对象进行了旋转,绘制出来的内容也就进行了旋转;
//是绕着0,0坐标系原点进行旋转的
//为了让图片显示出来;可以把Painter的起点移到中心来
painter.rotate(180);//旋转
painter.translate(-800,-600);//移动Painter中心点
painter.drawPixmap(0,0,800,600,pixmap);


http://www.ppmy.cn/news/1559540.html

相关文章

FFmpeg来从HTTP拉取流并实时推流到RTMP服务器

当使用FFmpeg来从HTTP拉取流并实时推流到RTMP服务器时&#xff0c;你可以使用以下命令&#xff1a; ffmpeg -i http://输入流地址 -c:v copy -c:a copy -f flv rtmp://RTMP服务器地址/应用名称/流名称 这是一个基本的命令示例&#xff0c;其中&#xff1a; - -i http://输入流地…

【HiVT】论文环境及Argoverse 1环境配置踩坑

HiVT源码链接&#xff1a;https://github.com/ZikangZhou/HiVT 1 论文环境配置 论文的环境配置在HiVT源码的README中有写&#xff08;见下图&#xff09; 但是有一些步骤需要注意&#xff0c;以下重新叙述一遍安装步骤并标出一些坑&#xff1a; 1.Clone this repository: g…

Java基础(三):桌球案例

桌球案例 图片资源&#xff1a; 代码 package com.bjsxt; import java.awt.*; import javax.swing.*;import static com.sun.glass.ui.Cursor.setVisible;public class BallGame extends JFrame {Image ball Toolkit.getDefaultToolkit().getImage("../../images/ball.…

log4j 单独设置某个类或者某个包的级别

原本的设置 log4j.rootLogger INFO, dailyfilelog4j.appender.dailyfile.DatePattern.yyyy-MM-dd log4j.appender.dailyfile.Threshold INFO log4j.appender.dailyfile org.apache.log4j.DailyRollingFileAppender log4j.appender.dailyfile.File /var/log/zeppelin/zeppe…

Qt 中实现系统主题感知

【写在前面】 在现代桌面应用程序开发中&#xff0c;系统主题感知是一项重要的功能&#xff0c;它使得应用程序能够根据用户的系统主题设置&#xff08;如深色模式或浅色模式&#xff09;自动调整其外观。 Qt 作为一个跨平台的C图形用户界面应用程序开发框架&#xff0c;提供…

电子电器架构 ---什么是智能电动汽车上的BMS?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…

利用Abel_Cain软件实现ARP欺骗

ARP协议是“Address Resolution Protocol”&#xff08;地址解析协议&#xff09;的缩写。在局域网中&#xff0c;网络中实际传输的是“帧”&#xff0c;帧里面是有目标主机的MAC地址的。在以太网中&#xff0c;一个主机要和另一个主机进行直接通信&#xff0c;必须要知道目标主…

Chrome被360导航篡改了怎么改回来?

一、Chrome被360导航篡改了怎么改回来&#xff1f; 查看是否被360主页锁定&#xff0c;地址栏输入chrome://version&#xff0c;看命令行end后面&#xff08;蓝色部分&#xff09;&#xff0c;是否有https://hao.360.com/?srclm&lsn31c42a959f 修改步骤 第一步&#xff1a…