qt介绍自定义插件 三

代码结构

主要编写这两个文件

复制代码
#ifndef TBATTERY_H
#define TBATTERY_H

#include <QWidget>
#include <QtUiPlugin/QDesignerExportWidget>
class QDESIGNER_WIDGET_EXPORT TBattery : public QWidget
{
    Q_OBJECT
private:
    QColor colorBackground=Qt::white;
    QColor colorBorder=Qt::black;
    QColor colorPower=Qt::green;
    QColor colorWarning=Qt::red;

    int m_powerLevel=60;//当前电量,0-100
    int m_warnLevel=20;
public:
    explicit TBattery(QWidget *parent = nullptr);

    int powerLevel() const;
    void setPowerLevel(int newPowerLevel);
    int warnLevel() const;
    void setWarnLevel(int newWarnLevel);

signals:


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


#endif // TBATTERY_H

#include "tbattery.h"
#include <QPainter>
#include <QPaintEvent>
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::Antialiasing);
    painter.setRenderHint(QPainter::TextAntialiasing);

    //绘制电池
    QPen pen(colorBorder);
    pen.setWidth(2);
    pen.setStyle(Qt::SolidLine);
    pen.setCapStyle(Qt::FlatCap);
    pen.setJoinStyle(Qt::BevelJoin);
    painter.setPen(pen);

    QBrush brush(colorBackground);
    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_warnLevel)
    {
        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();
}

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

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

int TBattery::warnLevel() const
{
    return m_warnLevel;
}

void TBattery::setWarnLevel(int newWarnLevel)
{
    m_warnLevel = newWarnLevel;
    repaint();
}

TBattery::TBattery(QWidget *parent)
    : QWidget{parent}
{

}

生成的dll文件(debug/和release都可以)

放到这个路径下

然后新建一个工程,然后在ui界面就显示我们自定义的插件

相关推荐
彧azz4 小时前
图的存储结构详解:邻接矩阵的原理、实现与应用
开发语言·数据结构·学习·php
嵌入式学习菌4 小时前
Modbus‑RTU 数据类型分析
开发语言·单片机·bug
kaixin_learn_qt_ing5 小时前
【银河麒麟下】 安装达梦数据库 + 使用Qt访问达梦数据库
qt
mengzhi啊5 小时前
缓存类CacheDataManager把临时数据存入json。做成插件·
qt·缓存·json
matlab代码5 小时前
基于matlab数字图像处理的指纹识别系统【源码68期】
开发语言·matlab
matlab代码6 小时前
基于matlab的水果识别系统(苹果香蕉菠萝梨桃子)【源码65期】
开发语言·matlab
wuyk5556 小时前
从零吃透 MQTT 通信|第 8 章 FreeRTOS 多任务架构下 MQTT 工程架构,任务拆分、队列解耦、临界区保护
c语言·开发语言·stm32·学习·架构
weixin199701080166 小时前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas
尘客-追梦6 小时前
Day 01:插件化之前,先看清 ABI 这堵墙
开发语言·c++·qt
持敬chijing7 小时前
Python-数据类型-列表
开发语言·python·青少年编程