ich bin Neulinge in Qt-Programmierung und muss aber ein kleines Programm schreiben. das Programm soll einfach eine Sinuswerte plotten, die man ihre Interval (xmin,xmax) über eine Gui eingeben soll. zuerst habe das Programm geschreiben,wobei ich die Parameter über die Konsole gegeben habe und hat super funktioniert nun versuche ich es so zu ändern dass ich die Parameter über Gui eingeben kann, aber leider kriege ich es nicht zum laufen zwar bekomme ich
keine Fehlermeldung aber bei Ausführung erhalte ich eine kleine graue Fenster.
hier Abschnitte von meines Codes:
project.h
Code: Alles auswählen
struct XYvalue{
double x;
double y;
XYvalue(double x, double y):x(x),y(y){}
};
class MyWidget :public QWidget
{
Q_OBJECT
public:
MyWidget(int n, QWidget *p=NULL,Qt::WindowFlags f=0);
public slots:
void plotten(void);
private:
QPushButton *plot;
QLineEdit* xmin ;
QLineEdit* xmax;
void drawXScale(QPainter *p, double i, int yp);
void drawYScale(QPainter *p, double i, int xp);
int valueNo;
std::vector<XYvalue> values;
double minX, minY,maxX, maxY, xFactor, yFactor;
QColor farbe;
protected:
virtual void paintEvent( QPaintEvent *ev);
};
Code: Alles auswählen
MyWidget::MyWidget( int n, QWidget *p, Qt::WindowFlags f )
: QWidget( p, f ) {
xmin = new QLineEdit(this);
xmin->setText( "0" );
xmax= new QLineEdit(this);
xmax->setText( "0" );
QPushButton *plot = new QPushButton("Plot",this);
QLabel *xminlab = new QLabel("xmin",this);
QLabel *xmaxlab = new QLabel("xmax",this);
QVBoxLayout* vlayout = new QVBoxLayout(this);
vlayout->addWidget(xminlab);
vlayout->addWidget(xmin);
vlayout->addWidget(xmaxlab);
vlayout->addWidget(xmax);
vlayout->addWidget(plot);
QObject::connect(plot,SIGNAL(clicked()),this,SLOT(plotten()));
valueNo = n;
int i;
for (i=0; i<n; i++ ){
values.push_back( XYvalue(0,0));
}
}
void MyWidget::plotten() {
double X=0;
double Y=0;
double tmin = (xmin->text()).toDouble();
double tmax = (xmax->text()).toDouble();
double xr=(double)(tmax-tmin)/psize;
X=tmin;
for(int i=0; i<psize; i++){
Y=sin(2*3.14*X);
values.push_back(XYvalue(X,Y));
X+=xr;
}
void MyWidget::paintEvent( QPaintEvent * ) {
QPainter p( this );
double xp, yp, xpAlt, ypAlt, diffX, diffY, i;
minX = maxX = values[0].x;
minY = maxY = values[0].y;
for ( int i=1; i<valueNo; i++ ) {
if ( values[i].x < minX ) minX = values[i].x;
if ( values[i].x > maxX ) maxX = values[i].x;
if ( values[i].y < minY ) minY = values[i].y;
if ( values[i].y > maxY ) maxY = values[i].y;
}
xFactor = width() / (maxX -minX),
yFactor = height() / (maxY -minY);
xpAlt = xp = ( values[0].x - minX ) * xFactor;
ypAlt = yp = ( maxY - values[0].y ) * yFactor;
for ( i=1; i<valueNo; i++ ) {
xp = ( values[(int)i].x - minX ) * xFactor;
yp = ( maxY - values[(int)i].y ) * yFactor;
p.drawLine( int(xpAlt), int(ypAlt), int(xp), int(yp) );
xpAlt = xp;
ypAlt = yp;
}
Code: Alles auswählen
int main(int argc,char** argv)
{
QApplication app(argc,argv);
QWidget* mywidget = new MyWidget(psize);
mywidget->resize(200,300);
mywidget->show();
return app.exec();
}
Viele Grüße
Seb