?
ich habe mein Programm geändert und es lauft jetzt aber habe ein Problem nur ein Qwidget habe.in der Fenster ,in der ich die Parameter eingebe, wird auch die Funktion geplottet
ich habe nur project.cpp geändert:
project.cpp
MyWidget::MyWidget( int n, QWidget *p, Qt::WindowFlags f )
: QWidget( p, f ) {
xmin = new QLineEdit(this); // Text-Feld
xmin->setText( "0" );
xmax= new QLineEdit(this); // Text-Feld
xmax->setText( "0" );
QPushButton *plot = new QPushButton("Plot",this); // Knopf
QLabel *xminlab = new QLabel("xmin",this); // label
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);
valueNo = n;
int i;
for (i=0; i<n; i++ ){
values.push_back( XYvalue(0,0));
}
QObject::connect(plot,SIGNAL(clicked()),this,SLOT(plotten()));
}
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;
values.clear();
X=tmin;
for(int i=0; i<psize; i++){
Y=sin(2*3.14*X);
values.push_back(XYvalue(X,Y));
X+=xr;
}
update();
}
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;
}
if(qAbs(maxX - minX) > 0.0001 && qAbs(maxY - minY) > 0.0001) {
xFactor = width() / (maxX -minX),
yFactor = height() / (maxY -minY);
// cout << xFactor<<'\t'<< yFactor<<'\n';
p.setPen( Qt::red) ;
//p.setBackgroundColor(Qt::white); // yellow ); //new.... x- und y-Achsen zeichnen
xp = -minX * xFactor;
yp = maxY * yFactor;
p.drawLine( 0, int(yp), width(), int(yp) ); // x-Achse
p.drawLine( int(xp), 0, int(xp), height() ); // y-Achse
diffX = (maxX-minX) / 10; //.... x-Skalen zeichnen/beschriften
for ( i = -diffX; i>=minX; i-=diffX )
drawXScale( &p, i, int(yp) );
for ( i = diffX; i<=maxX; i+=diffX )
drawXScale( &p, i, int(yp) );
diffY = (maxY-minY) / 10; //.... y-Skalen zeichnen/beschriften
for ( i = -diffY; i>=minY; i-=diffY )
drawYScale( &p, i, int(xp) );
for ( i = diffY; i<=maxY; i+=diffY )
drawYScale( &p, i, int(xp) );
//.... Funktion zeichnen
xpAlt = xp = ( values[0].x - minX ) * xFactor;
ypAlt = yp = ( maxY - values[0].y ) * yFactor;
// cout << xp<<'\t'<< yp<<'\n';
// cout <<minX<<'\t'<<maxY<<'\n';
p.setPen( Qt::black);
for ( i=1; i<valueNo; i++ ) {
xp = ( values[(int)i].x - minX ) * xFactor;
yp = ( maxY - values[(int)i].y ) * yFactor;
// xp = ( values[(int)i].x ) * xFactor;
// yp = ( values[(int)i].y ) * yFactor;
// cout <<values[(int)i].x<< '\t' <<values[(int)i].y<<'\n';
p.drawLine( int(xpAlt), int(ypAlt), int(xp), int(yp));
xpAlt = xp;
ypAlt = yp;
}
}
}
Kann mir Jemand sagen, wie ich mein MyWidget in 2 separate QWidget aufteilen kann.( Eine für die Eingabe und die zweite für den Plot mit dem paintEvent())
Danke im Voraus.
Du musst dein MyWidget in 2 separate QWidget aufteilen.