PDA

View Full Version : changing the Y axis of Plot makes the program unreponsive



neelu2u
1st September 2011, 10:21
I am trying to plot a random value in QWTPlot.
when I set the max value for the Y axis with the Max value of the randomly generated value, the program becomes unresponsive.(i.e)ui->SamplePlot->setAxisScale(QwtPlot::yLeft,0,MaxValue,MaxValue/2);//not working
If I set the max value of Y axis to three times of Max value of randomly generated value it is working fine. (i.e)ui->SamplePlot->setAxisScale(QwtPlot::yLeft,0,MaxValue*3,(MaxValue *3)/2);
Below is the program I used for that
//mainwindow.cpp


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <windows.h>

#include <qwt_plot_grid.h>
#include <qwt_plot_layout.h>

#include <qwt_plot_curve.h>

#include <qwt_painter.h>


QwtPlotGrid *Grid;
QwtPlotCurve *curveA;
bool updatePlotFlag = false;
HANDLE hDisplayThread;
int MaxValue;
double c[1024];
double XValue[1024] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,2 0,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36, 37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53 ,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,7 0,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86, 87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102 ,103,104,105,106,107,108,109,110,111,112,113,114,1 15,116,117,118,119,120,121,122,123,124,125,126,127 ,128,129,130,131,132,133,134,135,136,137,138,139,1 40,141,142,143,144,145,146,147,148,149,150,151,152 ,153,154,155,156,157,158,159,160,161,162,163,164,1 65,166,167,168,169,170,171,172,173,174,175,176,177 ,178,179,180,181,182,183,184,185,186,187,188,189,1 90,191,192,193,194,195,196,197,198,199,200,201,202 ,203,204,205,206,207,208,209,210,211,212,213,214,2 15,216,217,218,219,220,221,222,223,224,225,226,227 ,228,229,230,231,232,233,234,235,236,237,238,239,2 40,241,242,243,244,245,246,247,248,249,250,251,252 ,253,254,255,256,257,258,259,260,261,262,263,264,2 65,266,267,268,269,270,271,272,273,274,275,276,277 ,278,279,280,281,282,283,284,285,286,287,288,289,2 90,291,292,293,294,295,296,297,298,299,300,301,302 ,303,304,305,306,307,308,309,310,311,312,313,314,3 15,316,317,318,319,320,321,322,323,324,325,326,327 ,328,329,330,331,332,333,334,335,336,337,338,339,3 40,341,342,343,344,345,346,347,348,349,350,351,352 ,353,354,355,356,357,358,359,360,361,362,363,364,3 65,366,367,368,369,370,371,372,373,374,375,376,377 ,378,379,380,381,382,383,384,385,386,387,388,389,3 90,391,392,393,394,395,396,397,398,399,400,401,402 ,403,404,405,406,407,408,409,410,411,412,413,414,4 15,416,417,418,419,420,421,422,423,424,425,426,427 ,428,429,430,431,432,433,434,435,436,437,438,439,4 40,441,442,443,444,445,446,447,448,449,450,451,452 ,453,454,455,456,457,458,459,460,461,462,463,464,4 65,466,467,468,469,470,471,472,473,474,475,476,477 ,478,479,480,481,482,483,484,485,486,487,488,489,4 90,491,492,493,494,495,496,497,498,499,500,501,502 ,503,504,505,506,507,508,509,510,511,512,513,514,5 15,516,517,518,519,520,521,522,523,524,525,526,527 ,528,529,530,531,532,533,534,535,536,537,538,539,5 40,541,542,543,544,545,546,547,548,549,550,551,552 ,553,554,555,556,557,558,559,560,561,562,563,564,5 65,566,567,568,569,570,571,572,573,574,575,576,577 ,578,579,580,581,582,583,584,585,586,587,588,589,5 90,591,592,593,594,595,596,597,598,599,600,601,602 ,603,604,605,606,607,608,609,610,611,612,613,614,6 15,616,617,618,619,620,621,622,623,624,625,626,627 ,628,629,630,631,632,633,634,635,636,637,638,639,6 40,641,642,643,644,645,646,647,648,649,650,651,652 ,653,654,655,656,657,658,659,660,661,662,663,664,6 65,666,667,668,669,670,671,672,673,674,675,676,677 ,678,679,680,681,682,683,684,685,686,687,688,689,6 90,691,692,693,694,695,696,697,698,699,700,701,702 ,703,704,705,706,707,708,709,710,711,712,713,714,7 15,716,717,718,719,720,721,722,723,724,725,726,727 ,728,729,730,731,732,733,734,735,736,737,738,739,7 40,741,742,743,744,745,746,747,748,749,750,751,752 ,753,754,755,756,757,758,759,760,761,762,763,764,7 65,766,767,768,769,770,771,772,773,774,775,776,777 ,778,779,780,781,782,783,784,785,786,787,788,789,7 90,791,792,793,794,795,796,797,798,799,800,801,802 ,803,804,805,806,807,808,809,810,811,812,813,814,8 15,816,817,818,819,820,821,822,823,824,825,826,827 ,828,829,830,831,832,833,834,835,836,837,838,839,8 40,841,842,843,844,845,846,847,848,849,850,851,852 ,853,854,855,856,857,858,859,860,861,862,863,864,8 65,866,867,868,869,870,871,872,873,874,875,876,877 ,878,879,880,881,882,883,884,885,886,887,888,889,8 90,891,892,893,894,895,896,897,898,899,900,901,902 ,903,904,905,906,907,908,909,910,911,912,913,914,9 15,916,917,918,919,920,921,922,923,924,925,926,927 ,928,929,930,931,932,933,934,935,936,937,938,939,9 40,941,942,943,944,945,946,947,948,949,950,951,952 ,953,954,955,956,957,958,959,960,961,962,963,964,9 65,966,967,968,969,970,971,972,973,974,975,976,977 ,978,979,980,981,982,983,984,985,986,987,988,989,9 90,991,992,993,994,995,996,997,998,999,1000,1001,1 002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1 012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1 022,1023,1024};

int DisplayProcess();


MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
updatePlotArea();
}

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


void MainWindow::updatePlotArea()
{
Grid = (new QwtPlotGrid());
Grid->enableYMin(true);
Grid->attach(ui->SamplePlot);
/*ui->SamplePlot->plotLayout()->setAlignCanvasToScales(true);*/
ui->SamplePlot->setAxisScale(QwtPlot::yLeft,0,10000,10000/2);
ui->SamplePlot->setAxisScale(QwtPlot::xBottom,0,1024,1024/2);
ui->SamplePlot->setAxisMaxMinor(QwtPlot::xBottom, 0);
ui->SamplePlot->setAxisMaxMinor(QwtPlot::yLeft, 4);
Grid->setPen(QPen(Qt::white, 0.0, Qt::DotLine));

/*create curve for channel A */
curveA = new QwtPlotCurve();
curveA->setStyle(QwtPlotCurve::Lines);
curveA->setPen(QPen(Qt::yellow));
curveA->setRenderHint(QwtPlotItem::RenderAntialiased, true);
curveA->setPaintAttribute(QwtPlotCurve::ClipPolygons, false);
curveA->attach(ui->SamplePlot);

}

bool MainWindow::event(QEvent *e)
{
if (e->type() == QEvent::User + 2)
{
ui->SamplePlot->setAxisScale(QwtPlot::yLeft,0,MaxValue*3,(MaxValue *3)/2);
//ui->SamplePlot->setAxisScale(QwtPlot::yLeft,0,MaxValue,MaxValue/2);//not working

curveA->setSamples(XValue,c,1024);
ui->SamplePlot->replot();

return true;
}
return QMainWindow::event(e);
}

void MainWindow::on_Start_clicked()
{
if (updatePlotFlag == false)
{
updatePlotFlag = true;
hDisplayThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&DisplayProcess,0,0,NULL);
ui->Start->setText("Stop");
}
else
{
updatePlotFlag = false;
CloseHandle(hDisplayThread);
ui->Start->setText("Start");
}

}


void getInput()
{
double y;
int i;
double Max = 0;
for(i = 0; i<1024; i++)
{
y = 10*(sin(0.01*i*(100))+sin(0.075*i)+cos(0.5*i)+0.06 *(rand()-0.5*(100)));
c[i] = y;
if(y >Max)
Max = y;
}
MaxValue = Max;
}


int DisplayProcess()
{
while(updatePlotFlag == true)
{
getInput();
Sleep(50);
DataAvailableEvent *e = new DataAvailableEvent();
QApplication::postEvent(mainWindow, e);
}
return 1;
}

//end mainwindow.cpp


//main.cpp


#include <QtGui/QApplication>
#include "mainwindow.h"
MainWindow *mainWindow;

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
mainWindow = new MainWindow() ;
mainWindow->show();

return a.exec();
}

//end main.cpp

mainwindow.h




#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QApplication>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
bool event(QEvent *e);

private slots:
void on_Start_clicked();

private:
Ui::MainWindow *ui;
void updatePlotArea();
};

class DataAvailableEvent :public QEvent
{
public:
DataAvailableEvent() : QEvent((QEvent::Type)(QEvent::User + 2)){}

};

extern MainWindow *mainWindow;


#endif // MAINWINDOW_H


//end mainwindow.h