当前位置: 首页 > news >正文

Qt之自定义界面组件 一

通过qt中的painter绘图事件绘制一个电池电量图的变化。效果如下图

创建一个基于界面widget工程,在wdiget界面添加一个widget界面,将添加的widget界面的类提升为Tbattery.在Tbattery类中重写painEvent电池电量代码

文件目录结构

主要部分代码

//Tbattery.cpp
#include "tbattery.h"
#include<QPainter>
#include<QPaintEvent>
Tbattery::Tbattery(QWidget *parent)
    : QWidget{parent}
{

}

int Tbattery::warningLevel() const
{
    return m_warningLevel;
}

void Tbattery::setWarningLevel(int newWarningLevel)
{

    m_warningLevel=newWarningLevel;
       repaint();
}

int Tbattery::powerLevel() const
{
    return m_powerLevel;
}

void Tbattery::setPowerLevel(int newPowerLevel)
{
    m_powerLevel = newPowerLevel;
    repaint();
}

void Tbattery::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QRect rect(0,0,width(),height());
    painter.setViewport(rect);//设置屏幕坐标


     painter.setWindow(0,0,120,50);//设置逻辑坐标
     painter.setRenderHint(QPainter::TextAntialiasing);
     painter.setRenderHint(QPainter::Antialiasing);


    QPen pen(colorBorder);
    pen.setWidth(1);
    pen.setStyle(Qt::SolidLine);
    pen.setCapStyle(Qt::FlatCap);
    pen.setJoinStyle(Qt::BevelJoin);
    painter.setPen(pen);
    QBrush brush(colorBackgroud);
    brush.setStyle(Qt::SolidPattern);
    painter.setBrush(brush);

    //绘制边框

     rect.setRect(1,1,109,48);
     painter.drawRect(rect);

    brush.setColor(colorBorder);
    painter.setBrush(brush);
    rect.setRect(110,15,10,20);
    painter.drawRect(rect);

    if(m_powerLevel>m_warningLevel)
    {
        brush.setColor(colorPower);
        pen.setColor(colorPower);
    }
    else
    {
        brush.setColor(colorWarning);
        pen.setColor(colorWarning);
    }
    painter.setPen(pen);
    painter.setBrush(brush);

    if(m_powerLevel>0)
    {
        rect.setRect(5,5,m_powerLevel,40);
        painter.drawRect(rect);
    }
    QString powStr=QString::asprintf("%d%%",m_powerLevel);
    QFontMetrics textSize(this->font());
    QRect textRect=textSize.boundingRect(powStr);
    painter.setFont(this->font());
    pen.setColor(colorBorder);
    painter.setPen(pen);
    painter.drawText(55-textRect.width()/2,25+textRect.height()/2,powStr);
    event->accept();
}
//Tbattery.h/


#ifndef TBATTERY_H
#define TBATTERY_H

#include <QWidget>

class Tbattery : public QWidget
{
    Q_OBJECT
public:
    explicit Tbattery(QWidget *parent = nullptr);
    int warningLevel() const;
    void setWarningLevel(int newWarningLevel);

    int powerLevel() const;
    void setPowerLevel(int newPowerLevel);

private:
    QColor colorBackgroud=Qt::white;
    QColor colorBorder=Qt::black;
    QColor colorPower=Qt::green;
    QColor colorWarning=Qt::red;
    int m_powerLevel  = 60;
    int m_warningLevel = 20;

signals:

    // QWidget interface
protected:
    virtual void paintEvent(QPaintEvent *event) override;
};



#endif // TBATTERY_H

相关文章:

  • Jenkins 快讯
  • STM32G070CBT6读写FLASH中的数据
  • 浅谈Mysql数据库事务操作 用mybatis操作mysql事务 再在Springboot中使用Spring事务控制mysql事务回滚
  • ‌RTSPtoWeb, 一个将rtsp转换成webrtc的开源项目
  • 银河麒麟V10SP3Server中离线安装Docker引擎与docker-compose
  • 电池预测 | 第23讲 基于CNN-BiLSTM的锂电池剩余寿命预测,附带PPT视频讲解
  • GB9706.1-2020附件J绝缘路径参考
  • Redis系列:深入理解缓存穿透、缓存击穿、缓存雪崩及其解决方案
  • 如何用AI轻松制作完美PPT,节省时间又提升效率
  • 数据结构——查找
  • 背包问题——多重背包(C语言)
  • [免费]直接整篇翻译pdf工具-支持多种语言
  • Unity导出WebGL
  • 【GPT入门】第23课 langchain serve介绍
  • 【网页】CSS原子化+变量尝试
  • test skills
  • openai 标准化协议 Structured Outputs 具体示例教程
  • Django settings.py 文件全解析
  • 案例:图书管理
  • 如何保证消息不被重复消费?(如何保证消息消费的幂等性)
  • 金科股份:去年营收约275亿元,今年确保所有项目“零烂尾”
  • 直播电商行业代表呼吁:携手并肩伸出援手助力外贸企业攻坚克难
  • 上海出台灵活就业人员公积金新政:不限户籍、提取自由,6月起施行
  • 央视曝光假进口保健品:警惕!保税仓发货不等于真进口
  • 三亚亚龙湾3.4公里岸线近岸海域使用权挂牌出让,起始价近九千万
  • 稀土管制难倒特斯拉人形机器人“擎天柱”,马斯克:“正与中国协商”