16,216
社区成员
发帖
与我相关
我的任务
分享
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
///布局按钮界面
buttonwidget_=new ButtonWidget;
w1_=new QPushButton;
w1_->setText(tr("wave1"));
w2_=new QPushButton;
w2_->setText(tr("wave2"));
buttonlayout_=new QVBoxLayout(buttonwidget_);
buttonlayout_->setMargin(10);
buttonlayout_->setAlignment(Qt::AlignCenter);
buttonlayout_->addWidget(w1_);
buttonlayout_->addWidget(w2_);
///连接按钮点击和槽函数
connect(w1_,SIGNAL(clicked()),this,SLOT(create_wave1()));
connect(w2_,SIGNAL(clicked()),this,SLOT(create_wave2()));
///整体布局
drawwidget_=new DrawWidget;
QWidget *widget=new QWidget;
mainlayout_=new QGridLayout(widget);
mainlayout_->addWidget(buttonwidget_,0,0);
mainlayout_->addWidget(drawwidget_,0,1);
setCentralWidget(widget);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::create_wave1(){
wave1_=new Wave1;
drawwidget_->wavelayout_->addWidget(wave1_,0,0);
}
void MainWindow::create_wave2(){
wave2_=new Wave2;
drawwidget_->wavelayout_->addWidget(wave2_,1,0);
}
#include "drawwidget.h"
#include <QPainter>
DrawWidget::DrawWidget(QWidget *parent) : QWidget(parent)
{
setAutoFillBackground(true);
setPalette(QPalette(Qt::white));
setMinimumSize(600,400);
wavelayout_=new QGridLayout(this);
}
void DrawWidget::paintEvent(QPaintEvent *event){
///绘制坐标轴
QPainter painter(this);
painter.setPen(QPen(Qt::black,2));
painter.drawLine(50,350,550,350);
painter.drawLine(548,348,550,350);
painter.drawLine(548,352,550,350);
painter.drawText(560,352,tr("x"));
}
#include "wave1.h"
#include <QPainter>
#include <QMouseEvent>
/*使用贝赛尔曲线画法的波形1,继承自QLabel,用到函数cubicTo()*/
Wave1::Wave1()
{
}
void Wave1::paintEvent(QPaintEvent *event){
QPainter painter(this);
QPainterPath path;
path. moveTo(0,100);
path. cubicTo(30,0,70,0,100,100);
painter.setPen(QPen(Qt::blue,2));
painter. setBrush( QBrush ( Qt :: green, Qt :: DiagCrossPattern));
painter.drawPath(path);
}
void Wave1::mousePressEvent(QMouseEvent *event){
if(event->button()==Qt::LeftButton)
{
dragPosition_=event->globalPos()-frameGeometry().topLeft();
event->accept();
}
}
void Wave1::mouseMoveEvent(QMouseEvent *event){
if(event->buttons()&Qt::LeftButton)
{
move(event->globalPos()-dragPosition_);
event->accept();
}
#include "wave2.h"
#include <QPainter>
#include <QMouseEvent>
/*使用线段画法的波形2,继承自QLabel,用到函数lineTo()*/
Wave2::Wave2()
{
}
void Wave2::paintEvent(QPaintEvent *event){
QPainter painter(this);
QPainterPath path;
path. moveTo(0,100);
path.lineTo(30,50);
path.lineTo(50,70);
path.lineTo(70,30);
path.lineTo(100,100);
painter.setPen(QPen(Qt::red,2));
painter. setBrush( QBrush ( Qt :: green, Qt :: DiagCrossPattern));
painter.drawPath(path);
}
void Wave2::mousePressEvent(QMouseEvent *event){
if(event->button()==Qt::LeftButton)
{
dragPosition_=event->globalPos()-frameGeometry().topLeft();
event->accept();
}
}
void Wave2::mouseMoveEvent(QMouseEvent *event){
if(event->buttons()&Qt::LeftButton)
{
move(event->globalPos()-dragPosition_);
event->accept();
}
}
#include "wave1.h"
Wave1::Wave1(QObject *parent) : QObject(parent)
{
}
QRectF Wave1::boundingRect() const
{
qreal adjust=2;
return QRectF(0-adjust,0-adjust,100+adjust,100+adjust);
}
void Wave1::paint(QPainter *painter,const QStyleOptionGraphicsItem *option,QWidget *widget)
{
QPainterPath path;
path. moveTo(0,100);
path. cubicTo(30,0,70,0,100,100);
painter->setPen(QPen(Qt::blue,2));
painter->setBrush( QBrush ( Qt :: green, Qt :: DiagCrossPattern));
painter->drawPath(path);
}
void Wave1::mousePressEvent(QGraphicsSceneMouseEvent *event){
if(event->button()==Qt::LeftButton)
{
setCursor(Qt::ClosedHandCursor);
}
if(event->button()==Qt::RightButton)
{
}
}
void Wave1::mouseMoveEvent(QGraphicsSceneMouseEvent *event){
if(event->buttons()==Qt::LeftButton)
{
setPos(event->scenePos().x(),250);
}
}
#include "xaxis.h"
XAxis::XAxis(QObject *parent) : QObject(parent)
{
}
void XAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){
painter->setPen(QPen(Qt::black,2));
painter->drawLine(0,2,500,2);
painter->drawLine(498,0,500,2);
painter->drawLine(498,4,500,2);
painter->drawText(510,4,tr("x"));
}
QRectF XAxis::boundingRect() const
{
qreal adjust=2;
return QRectF(0-adjust,0-adjust,4+adjust,512+adjust);
}