云计算百科
云计算领域专业知识百科平台

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界面就显示我们自定义的插件

赞(0)
未经允许不得转载:网硕互联帮助中心 » qt介绍自定义插件 三
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!