首页 > 其他分享 >qt 卡拉OK 歌词效果

qt 卡拉OK 歌词效果

时间:2023-02-10 17:12:09浏览次数:67  
标签:OK qt yPt 歌词 height width pen painter 255


image


// 思路:一、先绘制全部歌词 二、设置裁剪区域 三、绘制已经唱的歌词

void Widget::paintEvent(QPaintEvent *event)
{
    QLineF line(10.0, 80.0, 90.0, 20.0);

    QPainter painter(this);

    QString m_sText = "测试文本 test";
    // 设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing);

    // 设置字体
    QFont font = painter.font();
    font.setPixelSize(240);
    painter.setFont(font);

    // 确定位置
    QFontMetrics metrics = painter.fontMetrics();
    int width = metrics.width(m_sText);
    int height = metrics.height();
    int xPt = (this->rect().width() - width) / 2;
    int yPt = (this->rect().height() - height) / 2 + height;

    // 设置绘制路径
    QPainterPath path;
    path.addText(xPt, yPt, font, m_sText);//文字
//    path.addRect(QRect(xPt, yPt - height, width, height));

    // 一、绘制全部歌词
    // 1、绘制轮廓
    QPen pen;
    pen.setWidth(8);//轮廓粗细8
    pen.setColor(QColor(0, 0, 0));
    painter.strokePath(path, pen);

    // 2、绘制中间文字
//    pen.setWidth(1);
    pen.setColor(QColor(255, 255, 255));
    painter.setPen(pen);
    painter.drawText(QPoint(xPt, yPt), m_sText);//The y-position is used as the baseline of the font.


    // 二、绘制演唱进度

    //1、设置裁剪区域,超出区域就不画
    painter.setClipRect(QRect(xPt, yPt-height+metrics.descent(), width/2, height));

    //2、绘制轮廓
    pen.setColor(QColor(255, 255, 255));
    painter.strokePath(path, pen);

    //3、绘制演唱进度文字
    pen.setColor(QColor(0, 0, 255));
    painter.setPen(pen);
    painter.drawText(QRect(xPt, yPt-height+metrics.descent(), width/2, height),  Qt::AlignLeft, m_sText);
//    painter.drawRect(QRect(xPt, yPt-height+metrics.descent(), width/2, height));

}

标签:OK,qt,yPt,歌词,height,width,pen,painter,255
From: https://www.cnblogs.com/cute/p/17109675.html

相关文章

  • Abp vnext + MQTT
    目录Artizan.Iot.Hub.Mqtt.Application.ContractsIMqttServiceBaseIMqttConnectionService:负责MqttServer与链接相关初始化IMqttPublishingService:负责MqttServer的发......
  • 合理安排kafka的broker、partition、consumer数量
    broker的数量最好大于等于partition数量一个partition最好对应一个硬盘,这样能最大限度发挥顺序写的优势。一个broker如果对应多个partition,需要随机分发,顺序IO会退化成随......
  • 基于zookeeper的kafka中间件
    一、Zookeeper概述1、Zookeeper定义Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。2、Zookeeper工作机制Zookeeper从设计模式角度来理解:是......
  • ansible playbook
    1playbook的相关知识2playbook模块3httpd,mysql,php,roles例子1.playbook的相关知识1.1playbook的简介playbook是一个不同于使用Ansible命令行执行方式的模......
  • Ansible剧本(playbook)
    一、playbooks概述以及实例操作1、playbooks的组成playbooks本身由以下各部分组成Tasks:任务,即通过task调用ansible的模板将多个操作组织在一个playbook中运......
  • 会话技术-Cookie特点&作用、Cookie案例分析、代码实现
    会话技术-Cookie-特点&作用Cookie的特点和作用1.cookie存储数据在客户端浏览器2.浏览器对于单个cookie的大小有限制(4kb)以及对同一个域名下的总co......
  • keycloak~再说session和token
    我们需要认清session会话和token令牌的区别,在keycloak中,他们是不同的两个概念,职责也不一样。session【session_state】它被保存到浏览器的cookie中,有4个会话属性,这主要......
  • JSP_案例_改造Cookie案例与会话技术_Session_快速入门
     JSP_案例_改造Cookie案例<%@pageimport="java.util.Date"%><%@pageimport="java.text.SimpleDateFormat"%><%@pageimport="java.net.URLEncoder"%><......
  • 会话技术Cookie发送多个Cookie、Cookie存活时间、Cookie存储中文、Cookie共享
    会话技术-Cookie-发送多个Cookie1.一次可不可以发送多个Cookie?可以可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。p......
  • 会话技术Cookie快速入门、原理分析
    会话技术Cookie快速入门1.概念:客户端会话技术,将数据保存到客户端2.快速入门:使用步骤:1.创建Cookie对象,绑定数据newCook......