#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "paintform.h"
#include <QMainWindow>
#include <QtGui>
namespace Ui
{
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void changeEvent(QEvent *e);
//void mousePressEvent(QMouseEvent *);
private:
//QWidget *pwid;
QString filename;
QString curFile;
Ui::MainWindow *ui;
QPrinter printer;
PaintForm *paintForm;
QMdiSubWindow *subwid;
private slots:
void on_actionClose_triggered();
void on_action25_triggered();
void on_action50_triggered();
void on_action75_triggered();
void on_actionOpen_triggered();
void on_action400_triggered();
void on_actionPrint_triggered();
void on_actionPrintPreView_triggered();
void on_action100_triggered();
void on_action200_triggered();
void previewPaint(QPrinter *);
void printPaint(QPrinter *);
public slots:
};
#endif
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "paintform.h"
#include <QtGui>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QMainWindow *subMain=new QMainWindow;
QScrollArea *scroll=new QScrollArea;
subMain->setCentralWidget(scroll);
paintForm=new PaintForm(ui->mdiArea);
scroll->setWidget(paintForm);
subwid=ui->mdiArea->addSubWindow(subMain);
subwid->setWindowTitle("DispGrl");
subwid->setMinimumSize(700,500);
subwid->show();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type())
{
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void MainWindow::on_actionPrint_triggered()
{
printer.setDocName(curFile);
printer.setColorMode(QPrinter::GrayScale);
QPrintDialog printDia(&printer,this);
//if(printDia.exec()==QDialog::Accepted)
//{
// QPainter painter(&printer);
// paintForm->myPaint(painter);
//}
connect(&printDia,SIGNAL(accepted(QPrinter*)),this,SLOT(printPaint(QPrinter*)));
printDia.exec();
}
void MainWindow::printPaint(QPrinter *print)
{
QPainter painter(print);
paintForm->myPaint(painter);
}
void MainWindow::on_actionPrintPreView_triggered()
{
printer.setDocName(curFile);
QPrintPreviewDialog preview(&printer,this,Qt::Dialog);
connect(&preview,SIGNAL(paintRequested(QPrinter*)),this,SLOT(previewPaint(QPrinter*)));
preview.exec();
}
void MainWindow::previewPaint(QPrinter *print)
{
QPainter painter(print);
paintForm->myPaint(painter);
}
void MainWindow::on_action400_triggered()
{
paintForm->sca=4;
paintForm->setMinimumSize(paintForm->width()*4,paintForm->height()*4);
paintForm->update();
}
void MainWindow::on_action200_triggered()
{
paintForm->sca=2;
paintForm->setMinimumSize(paintForm->width()*2,paintForm->height()*2);
paintForm->update();
}
void MainWindow::on_action100_triggered()
{
paintForm->sca=1;
paintForm->setMinimumSize(paintForm->width()*1,paintForm->height()*1);
paintForm->update();
}
void MainWindow::on_action75_triggered()
{
paintForm->sca=0.75;
paintForm->setMinimumSize(paintForm->width()*0.75,paintForm->height()*0.75);
paintForm->update();
}
void MainWindow::on_action50_triggered()
{
paintForm->sca=0.5;
paintForm->setMinimumSize(paintForm->width()*0.5,paintForm->height()*0.5);
paintForm->update();
}
void MainWindow::on_action25_triggered()
{
paintForm->sca=0.25;
paintForm->setMinimumSize(paintForm->width()*0.25,paintForm->height()*0.25);
paintForm->update();
}
void MainWindow::on_actionOpen_triggered()
{
filename=QFileDialog::getOpenFileName(this,tr("Open"),tr("./"),
tr("SDC Data(*.dat)"));
// filename=QFileDialog::getOpenFileName(this,tr("Open"),tr("./"),
// tr("DAT File(*.dat);;ALL(*.*)"));
curFile=QFileInfo(filename).fileName();
// if(paintForm)
// {
// delete paintForm;
// }
// if(subwid)
// {
// delete subwid;
// }
if(filename=="")
{
//QMessageBox::about(this,"DispGraph","please choice a file!");
return;//跳出此方法,不执行if语句后的内容.
}
QMainWindow *subMain=new QMainWindow;
QScrollArea *scroll=new QScrollArea;
subMain->setCentralWidget(scroll);
paintForm=new PaintForm(ui->mdiArea);
paintForm->set_FileName(filename);
paintForm->getdata();
scroll->setWidget(paintForm);
subwid=ui->mdiArea->addSubWindow(subMain);
subwid->setWindowTitle(curFile);
subwid->setMinimumSize(700,500);
subwid->show();
//subwid->setLayoutDirection(Qt::LeftToRight);
}
/*void MainWindow::mousePressEvent(QMouseEvent *e)
{
pwid=this->childAt(e->pos());
pwid->effectiveWinId();
qDebug()<<pwid<<e->pos();
}*/
void MainWindow::on_actionClose_triggered()
{
ui->mdiArea->closeActiveSubWindow();
}
#ifndef SDCDATA_H
#define SDCDATA_H
#include <QtCore>
typedef struct
{
char type[8];
char mons[4];
unsigned char s;
quint16 m;
char date1[8];
struct
{
unsigned char torque;
unsigned char speed;
}ST[500];
}SDC;
#endif // SDCDATA_H
#ifndef PAINTFORM_H
#define PAINTFORM_H
#include <QtGui>
#include <QWidget>
namespace Ui
{
class PaintForm;
}
class PaintForm : public QWidget
{
Q_OBJECT
public:
PaintForm(QWidget *parent = 0);
void paintEvent(QPaintEvent *);
void myPaint(QPainter &painter);
float sca;
void getdata();
void set_FileName(
QString filename);
//quint16 hightLow(quint16 &phl);
~PaintForm();
protected:
void changeEvent(QEvent *e);
private:
Ui::PaintForm *ui;
QPoint startPonit;
float torY[500];
float speY[500];
QPointF pointTor[500];
QPointF pointSpe[500];
QLineF lineTor[500];
QLineF lineSpe[500];
quint16 plus;
QString fileName;
public slots:
};
#endif
#include "paintform.h"
#include "ui_paintform.h"
#include "SDCData.h"
#include <QtGui>
PaintForm::PaintForm(QWidget *parent) :
QWidget(parent),
ui(new Ui::PaintForm)
{
ui->setupUi(this);
sca=1;
plus=3000;
}
PaintForm::~PaintForm()
{
delete ui;
}
void PaintForm::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type())
{
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void PaintForm::myPaint(QPainter &painter)
{
painter.translate(50,40);
painter.scale(sca,sca);
QPen pen(Qt::green);
painter.setPen(pen);
int len=50;
int hei=40;
QString plusStr=QString::number(plus,10);
QString minsStr="-"+plusStr;
for(int i=1;i<=51;i++)
{//49条绿线,2两条黑线
if(i==1||i==51)
{//2两条黑线
pen.setColor(Qt::black);
painter.setPen(pen);
painter.drawLine(len,40,len,320);
len +=10;//每条竖线相隔10个像素
pen.setColor(Qt::green);
painter.setPen(pen);
continue;
}
painter.drawLine(len,40,len,320);
len +=10;
}
for(int i=1;i<=15;i++)
{
if(i==1||i==8||i==15)
{
pen.setColor(Qt::black);
painter.setPen(pen);
painter.drawLine(50,hei,550,hei);
hei +=20;
pen.setColor(Qt::green);
painter.setPen(pen);
continue;
}
painter.drawLine(50,hei,550,hei);
hei +=20;
}
pen.setColor(Qt::black);
painter.setPen(pen);
len=50;//重新设定间隔宽度的初始值
for(int i=1;i<=49;i++)
{
len +=10;
if(i%10==0)
{
painter.drawLine(len,175,len,185);
painter.drawLine(len,315,len,320);
}
painter.drawLine(len,177,len,183);
painter.drawLine(len,317,len,320);
}
painter.drawText(47,335,"0.0");
painter.drawText(147,335,"1.0");
painter.drawText(247,335,"2.0");
painter.drawText(347,335,"3.0");
painter.drawText(447,335,"4.0");
painter.drawText(547,335,"5.0");
painter.drawText(35,184,"0");
painter.drawText(15,184,"[%]");
painter.drawText(555,184,"0");
painter.drawText(575,184,"[rpm]");
painter.drawText(30,64,"300");
painter.drawText(25,304,"-300");
painter.drawText(555,50,plusStr);
painter.drawText(555,320,minsStr);
/******************画曲线部分**********************/
painter.translate(50,180);//将中间的那条横线的起点设为坐标系原点
painter.setPen(Qt::red);
painter.drawLines(lineTor,500);
painter.setPen(Qt::blue);
painter.drawLines(lineSpe,498);
}
void PaintForm::getdata()
{
QFile file;
file.setFileName(fileName);
file.open(QIODevice::ReadWrite);
QDataStream in(&file);
SDC sdc[1];
in.readRawData((char *)sdc,sizeof(SDC)*1);//直接将.dat文件的所有内容读到内存中
plus=sdc[0].m;
//hightLow(plus);
for(int i=0;i<=500;i++)
{
//qDebug()<<sdc[0].ST
.torque<<sdc[0].ST.speed;
torY=(float)sdc[0].ST.torque;//从文件获得初始数据
speY=(float)sdc[0].ST.speed;
//qDebug()<<torY<<speY;
pointTor=QPointF(i,(128-torY)*24/23);//计算放在坐标系中正确位置
//pointSpe=QPointF(i,(128-speY)*192/115);
pointSpe=QPointF(i,(128-speY)*(plus*120)/(115*3000));
}
for(int i=0;i<=499;i++)
{//初始化500条线
lineTor=QLineF(pointTor,pointTor[i+1]);
lineSpe=QLineF(pointSpe[i+1],pointSpe[i+2]);
}
}
/*quint16 PaintForm::hightLow(quint16 &phl)
{//高低位转换
quint16 hei;
quint16 low;
low=phl&0xff00;
low=low>>8;
hei=phl&0x00ff;
hei=hei<<8;
phl=low+hei;
return phl;
}*/
void PaintForm::paintEvent(QPaintEvent *)
{
QPainter painter(this);
myPaint(painter);
}
void PaintForm::set_FileName(QString filename)
{
this->fileName=filename;
//qDebug()<<fileName;
}
[ 此帖被孤云白鹤在2010-07-29 14:07重新编辑 ]