QT 绘制电池

label设置字体,居中
QFont font("Times", 18, QFont::Bold);
ui->label->setFont(font); //设置字体
ui->label->setAlignment(Qt::AlignCenter); //居中对齐
ui->label->setText("Hello"); //文字

第一步:设置label大小

ui->label->setFixedSize(300, 200);

第二步:给label设置事件过滤器,this指针指定当事件发生时调用当前类中的事件过滤器进行处理

ui->label->installEventFilter(this);//在label上安装事件过滤器,this指针指定当事件发生时调用当前类中的事件过滤器进行处理

第三步:实现bool eventFilter(QObject *watched, QEvent *event);函数

bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->label && event->type() == QEvent::Paint)
    {
        paint();
    }
    return QMainWindow::eventFilter(watched, event);
}

第四步:实现画图函数

QPainter paint(ui->label);
paint.setPen(QPen(QColor(136, 205, 112), 2));
paint.drawRect(0,0, 200, 140);
paint.setBrush(QColor(137, 249, 83));
paint.drawRoundedRect(200, 40,20,60,2,2);

完整代码:

.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void setValue(int value);
    void paint();
    bool eventFilter(QObject *watched, QEvent *event);

private:
    Ui::MainWindow *ui;
    double m_value;
    double max_value;
};

#endif // MAINWINDOW_H

.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    max_value = 200;
    ui->setupUi(this);
    ui->label->setFixedSize(300, 200);
    ui->label->installEventFilter(this);//在label上安装事件过滤器,this指针指定当事件发生时调用当前类中的事件过滤器进行处理
    setValue(100);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::setValue(int value)
{
    m_value = value/15;
    update();
}

bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->label && event->type() == QEvent::Paint)
    {
        paint();
    }
    return QMainWindow::eventFilter(watched, event);
}

void MainWindow::paint()
{
    QPainter paint(ui->label);
    paint.setPen(QPen(QColor(136, 205, 112), 2));
    paint.drawRect(0,0, 200, 140);
    paint.setBrush(QColor(137, 249, 83));
    paint.drawRoundedRect(200, 40,20,60,2,2);
    paint.setBrush(QColor(137, 249, 83));
    paint.drawRect(0, 0, m_value, 140); 
}

当然这个程序是个半成品,我这里的m_value是已经固定了的,在实际情况下应该是根据实际情况自动改变m_value的值,你应该实现一个函数每隔多少分钟向setValue()函数传输一个值来不断的更新你写的电池,最简单的是你写个定时器函数timer,每隔多少分钟传输一次数据。

猜你喜欢

转载自www.cnblogs.com/caozewen/p/12794639.html
今日推荐