Hilfe bei kleiner Gui

Alles rund um die Programmierung mit Qt
Antworten
Sebleb
Beiträge: 15
Registriert: 17. Juli 2011 19:17

Hilfe bei kleiner Gui

Beitrag 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
almboa
Beiträge: 21
Registriert: 27. September 2009 11:52

Re: Hilfe bei kleiner Gui

Beitrag von almboa »

Dir fehlt noch ein setLayout() in deinem widget-ctor!
Antworten