#include<QGraphicsScene>
#include<QGraphicsSimpleTextItem>
#include<QDebug>
#include "widget.h"
#include "ui_widget.h"
#include"triangleslideritem.h"
#include"trianglerotateitem.h"
Widget::Widget(QWidget *parent)
: QGraphicsView(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
QGraphicsScene* scene=new QGraphicsScene(this);
setScene(scene);
scene->setSceneRect(-200,-200,400,400);
setAlignment(Qt::AlignLeft | Qt::AlignTop);
QLineF lineF(-100,-150,-100,200);
scene->addLine(lineF,QPen(Qt::black));
{
//直动型滑块(指向左侧)
TriangleSliderItem* sliderItem=new TriangleSliderItem;
sliderItem->setFixedXValue(-100);
sliderItem->setBrush(QBrush(Qt::gray)); //三角滑块的填充颜色
sliderItem->setSize(15,16);//三角滑块的尺寸
sliderItem->setRange(lineF.p1().y(),lineF.p2().y());//三角滑块的滑动范围
scene->addItem(sliderItem);
QGraphicsSimpleTextItem* text=new QGraphicsSimpleTextItem(sliderItem);
text->setPos(0,-30);
text->setPen(QPen(Qt::black));
text->hide();
//三角滑块在位置改变时,会发送位置的纵坐标值
connect(sliderItem,&TriangleSliderItem::sig_posYChanged,this,[=](double yValue)
{
qDebug()<<"TriangleSliderItem::sig_posYChanged"<<yValue;
text->setText(QString("%1").arg(yValue,1,'f',2));
});
sliderItem->setPos(-100,-150);
connect(sliderItem,&TriangleSliderItem::sig_pressChanged,this,[=](bool bPressed)
{
text->setVisible(bPressed);
});
}
{
//直动型滑块(指向右侧)
TriangleSliderItem* sliderItem=new TriangleSliderItem;
sliderItem->setFixedXValue(-100);
sliderItem->setDirection(); //设置指向右侧
sliderItem->setBrush(QBrush(Qt::blue)); //三角滑块的填充颜色
sliderItem->setSize(20,22);//三角滑块的尺寸
sliderItem->setRange(lineF.p1().y(),lineF.p2().y());//三角滑块的滑动范围
scene->addItem(sliderItem);
QGraphicsSimpleTextItem* text=new QGraphicsSimpleTextItem(sliderItem);
text->setPos(-60,-5);
text->setPen(QPen(Qt::black));
text->hide();
//三角滑块在位置改变时,会发送位置的纵坐标值
connect(sliderItem,&TriangleSliderItem::sig_posYChanged,this,[=](double yValue)
{
qDebug()<<"TriangleSliderItem::sig_posYChanged"<<yValue;
text->setText(QString("%1").arg(yValue,2,'f',1));
});
sliderItem->setPos(-100,-150);
connect(sliderItem,&TriangleItem::sig_pressChanged,this,[=](bool bPressed)
{
text->setVisible(bPressed);
});
}
{
double radius=150;
QPointF _center(100,0);
TriangleRotateItem* rotateItem=new TriangleRotateItem;
rotateItem->setRotateCenter(_center); //设置滑块的旋转中心
rotateItem->setRotateRadius(radius); //设置滑块的旋转中心
scene->addItem(rotateItem);
QGraphicsSimpleTextItem* text=new QGraphicsSimpleTextItem(rotateItem);
text->setPos(22,-5);
text->setPen(QPen(Qt::black));
text->hide();
connect(rotateItem,&TriangleRotateItem::sig_degree,this,[=](double degree)
{
text->setText(QString("%1°").arg(degree,1,'f',0));
});
rotateItem->setDegree(90);//设置滑块的角度
//滑块按下时,显示角度值
connect(rotateItem,&TriangleItem::sig_pressChanged,this,[=](bool bPressed)
{
text->setVisible(bPressed);
});
QRectF rectF(0,0,2*radius,2*radius);
rectF.moveCenter(_center);
scene->addEllipse(rectF,QPen(Qt::black));
}
}
Widget::~Widget()
{
delete ui;
}