2011-02-06 2 views
2

Qt에 젖은 채로 젖은 채 QlineEdit에서 문자열을 가져 와서 단추를 클릭 한 후 QTextBrowser에 추가하려고합니다. 그 순간에 추가 된 단어를 추가하는 것뿐입니다).Qt에서 새로운 공개 신호를 설정 한 후 Seg 오류가 발생했습니다.

프로그램이 실행되고 GUI가 화면에 표시되지만 버튼을 클릭 할 때마다 내 프로그램의 오류가 발생합니다.

HEADER : 여기

내 코드입니다, 그 밖의 많은 불필요 잘라 여기

#ifndef TCD2_GUI_H 
#define TCD2_GUI_H 
//bunch of includes 

class TCD2_GUI : public QWidget 
{ 
    Q_OBJECT 

public: 
    TCD2_GUI(QWidget *window = 0); 
    //bunch of other members 
    QLineEdit *a1_1; 
    QTextBrowser *stdoutput; 

public slots: 
    void applySettings(void); 

private: 

}; 
#endif // TCD2_GUI_H 

하고 오류를 일으키는의 CPP의 조각입니다

QTextBrowser *stdoutput = new QTextBrowser(); 

    stdoutput->append("Welcome!"); 

    QObject::connect(apply, SIGNAL(clicked()), this, SLOT(applySettings())); 

    //------------------------------------------------------Standard Output END 
    //layout things 

} 

void TCD2_GUI::applySettings() 
{ 
    stdoutput->append("appended"); 
} 

답변

3

stdoutput을 간주한다. 예에 의해 생성자에 추가하십시오 : 다음 줄 andremove

stdoutput = new QTextBrowser(); 

을 코드의 당신의 조각에서 :

QTextBrowser stdoutput = new QTextBrowser(); 
+0

고마워요, 맞아. –

1

제공된 코드를 보면, 내 생각에 stdoutput 두 번 선언됩니다. * TCD2_GUI * 클래스의 멤버로 두 번째로, 레이아웃에서 메소드 (클래스 생성자?)의 로컬 변수로 두 번째. ApplySettings은 초기화되지 않은 클래스 멤버를 사용하므로 세그먼트 화 오류가 발생합니다.

에 코드를 변경 :

stdoutput = new QTextBrowser(); 
stdoutput->append("Welcome!"); 
QObject::connect(apply, SIGNAL(clicked()), this, SLOT(applySettings())); 

하면 문제를 해결할 수 있습니다. 이 도움이

희망은, 당신의 applySettings() 함수 충돌이 로컬 변수 발생 코드의 당신의 조각 stdoutput 반면 TCD2_GUI 클래스의 멤버를 참조에

+0

덕분에 많이. 네, 모든 변수가 두 번 선언되었습니다. –