主要实现
widget1在widget2之上
在widget2上绘制柱形图的柱子
在widget1上绘制一个椭圆形的透明框覆盖在widget2上
重要:widget1设置背景透明
ui->barcontainer->setAttribute(Qt::WA_TranslucentBackground,true);
painter.setPen(Qt::blue);
painter.setBrush(QColor(0,0,0,0));
QRect rect1 = QRect(ui->barcontainer->rect());
rect1.adjust(10,0,-10,0);
// painter.setCompositionMode(QPainter::CompositionMode_Clear);//注意这一行代码
painter.drawRoundedRect(rect1,15,15);
QPainterPath path;
path.addRect(ui->barcontainer->rect());
path.addRoundedRect(rect1,15,15);
painter.fillPath(path,bgcolor);
#include "bargraph.h"
#include "ui_bargraph.h"
#define BAR_OFFSET 18
#define BARH_OFFSET 8
#define MARGIN 2
BarGraph::BarGraph(QWidget *parent) :
QWidget(parent),
ui(new Ui::BarGraph),
minValue(0),
maxValue(100),
cutoffminValue(0),
cutoffmaxValue(0),
cutoffminValue1(0),
cutoffmaxValue1(0),
cutoffminValue1_flag(false),
cutoffmaxValue1_flag(false),
currentValue(0),
unit(" "),
name(" "),
bgColor(QColor(2,172,135)),
barColor(QColor(4,148,117)),
cutoffColor(QColor(254,224,0)),
valueColor(QColor(0,0,0)),
value_red(false)
{
ui->setupUi(this);
ui->barcontainer->installEventFilter(this);
ui->value->installEventFilter(this);
ui->name->installEventFilter(this);
ui->minmax->installEventFilter(this);
ui->cutoff->installEventFilter(this);
ui->barback->installEventFilter(this);
contain_x = ui->barcontainer->rect().x();
contain_y = ui->barcontainer->rect().y() + BARH_OFFSET;
contain_w = ui->barcontainer->rect().width();
contain_h = ui->barcontainer->rect().height() - (BARH_OFFSET*2);
// ui->minmax->hide();
ui->barcontainer->setAttribute(Qt::WA_TranslucentBackground,true);
}
BarGraph::~BarGraph()
{
delete ui;
}
void BarGraph::paintEvent(QPaintEvent *event)
{
// QPainter painter(ui->valurbar);
// painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
}
bool BarGraph::eventFilter(QObject *watched, QEvent *event)
{
if(watched ==ui->value && event->type() == QEvent::Paint)
{
drawvalue();
}
if(watched ==ui->name && event->type() == QEvent::Paint)
{
drawname();
}
if(watched == ui->barcontainer && event->type() == QEvent::Paint)
{
drawBar();
//