Seite 1 von 1

Hilfe bei kleiner Gui

Verfasst: 29. August 2011 16:05
von Sebleb
Hallo zusammen,

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);

}; 
project.cpp

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;
   } 
main.cpp

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();
} 
ich bin für jede Tipps sehr dankbar.

Viele Grüße
Seb

Re: Hilfe bei kleiner Gui

Verfasst: 6. September 2011 15:07
von almboa
Dir fehlt noch ein setLayout() in deinem widget-ctor!