• 5127阅读
  • 2回复

出现段错误 [复制链接]

上一主题 下一主题
离线xlgoodday
 

只看楼主 倒序阅读 楼主  发表于: 2006-05-27
出现段错误
源代码:
t7/lcdrange.h Example File
/****************************************************************
**
** Definition of LCDRange class, Qt tutorial 7
**
****************************************************************/

#ifndef LCDRANGE_H
#define LCDRANGE_H

#include <qvbox.h>

class QSlider;


class LCDRange : public QVBox
{
  Q_OBJECT
public:
  LCDRange( QWidget *parent=0, const char *name=0 );

  int value() const;

public slots:
  void setValue( int );

signals:
  void valueChanged( int );

private:
  QSlider *slider;
};


#endif // LCDRANGE_H

t7/lcdrange.cpp Example File
/****************************************************************
**
** Implementation of LCDRange class, Qt tutorial 7
**
****************************************************************/

#include "lcdrange.h"

#include <qslider.h>
#include <qlcdnumber.h>

LCDRange::LCDRange( QWidget *parent, const char *name )
    : QVBox( parent, name )
{
  QLCDNumber *lcd = new QLCDNumber( 2, this, "lcd" );
  slider = new QSlider( Horizontal, this, "slider" );
  slider->setRange( 0, 99 );
  slider->setValue( 0 );
  connect( slider, SIGNAL(valueChanged(int)),
        lcd, SLOT(display(int)) );
  connect( slider, SIGNAL(valueChanged(int)),
        SIGNAL(valueChanged(int)) );
}

int LCDRange::value() const
{
  return slider->value();
}

void LCDRange::setValue( int value )
{
  slider->setValue( value );
}

t7/main.cpp Example File
/****************************************************************
**
** Qt tutorial 7
**
****************************************************************/

#include <qapplication.h>
#include <qpushbutton.h>
#include <qlcdnumber.h>
#include <qfont.h>
#include <qvbox.h>
#include <qgrid.h>

#include "lcdrange.h"


class MyWidget : public QVBox
{
public:
  MyWidget( QWidget *parent=0, const char *name=0 );
};


MyWidget::MyWidget( QWidget *parent, const char *name )
    : QVBox( parent, name )
{
  QPushButton *quit = new QPushButton( "Quit", this, "quit" );
  quit->setFont( QFont( "Times", 18, QFont::Bold ) );

  connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );

  QGrid *grid = new QGrid( 4, this );

  LCDRange *previous = 0;
  for( int r = 0 ; r < 4 ; r++ ) {
    for( int c = 0 ; c < 4 ; c++ ) {
        LCDRange* lr = new LCDRange( grid );
        if ( previous )
          connect( lr, SIGNAL(valueChanged(int)),
                previous, SLOT(setValue(int)) );
        previous = lr;
    }
  }
}


int main( int argc, char **argv )
{
  QApplication a( argc, argv );

  MyWidget w;
  a.setMainWidget( &w );
  w.show();
  return a.exec();
}

按了第二个LCDRange控件之后就退出,同时显示
segmentation fault.
用gdb调试,错误出现在
void LCDRange::setValue( int value )
{
  slider->setValue( value );
}
中的slider->setValue(value);
但我不知道为什么会这样,求教高手。
[ 此贴被XChinux在2006-05-28 08:17重新编辑 ]
离线xlgoodday

只看该作者 1楼 发表于: 2006-05-27
我的Qt版本是3.1.2.这个错误和我的版本没有关系吧?
离线chwoozy

只看该作者 2楼 发表于: 2006-05-30
Re:出现段错误
这个example的版本和你的Qt版本匹配吗?你改动过这个example的源码吗?
快速回复
限100 字节
 
上一个 下一个