QT自定义Widget控件及其使用
#include ""
#include <QPainter>
#include <QPen>
//界面的绘制
void QmyBattery::paintEvent(QPaintEvent *event)
{
//避免编译错误
Q_UNUSED(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;
pen.setWidth(2);
pen.setColor(mColorBorder);
pen.setStyle(Qt::SolidLine);
pen.setCapStyle(Qt::FlatCap);
pen.setJoinStyle(Qt::BevelJoin);
painter.setPen(pen);
QBrush brush;
brush.setColor(mColorBack);
brush.setStyle(Qt::SolidPattern);
painter.setBrush(brush);
rect.setRect(1,1,109,48);
painter.drawRect(rect);
brush.setColor(mColorBorder);
painter.setBrush(brush);
//电池头
rect.setRect(110,15,10,20);
painter.drawRect(rect);
if(mPowerLevel>myWarnLevrl){
brush.setColor(mColorPower);
pen.setColor(mColorPower);
}else{
brush.setColor(mColorWarning);
pen.setColor(mColorWarning);
}
painter.setBrush(brush);
painter.setPen(pen);
if(mPowerLevel>0){
rect.setRect(5,5,mPowerLevel,40);
painter.drawRect(rect);
}
QFontMetrics textsize(this->font());
QString powStr=QString::asprintf("%d%%",mPowerLevel);
QRect textRect=textsize.boundingRect(powStr);
painter.setFont(this->font());
pen.setColor(mColorBorder);
painter.setPen(pen);
painter.drawText(55-textRect.width()/2,23+textRect.height()/2,powStr);
}
void QmyBattery::setPowerLevel(int pow)
{
mPowerLevel=pow;
emit powerLevelChanged();
repaint();
}
int QmyBattery::powerLevel()
{
return mPowerLevel;
}
void QmyBattery::setWarnLevel(int warn)
{
myWarnLevrl=warn;
repaint();
}
int QmyBattery::warnLevel()
{
return myWarnLevrl;
}
QSize QmyBattery::sizeHint()
{
int H=this->height();
int W=H*12/5;
QSize size(W,H);
return size;
}
QmyBattery::QmyBattery(QWidget *parent) : QWidget(parent)
{
}