2012-01-11 8 views
0

もっと大きなプロジェクトの一部として非常にシンプルなクラスを作成していました。ラインtxtUser = new QLineEdit;がクラッシュするsetupUI()関数を作成しようとするとQt Segfault - ノンコーディングエラー

class Login : public QDialog 
{ 
    Q_OBJECT 
    private: 
     QLineEdit* txtUser; 
     QLineEdit* txtPass; 
     void setupUI(); 
    public: 
     Login(QWidget* parent = 0); 
}; 

:クラスが同じくらい簡単でした。私は多くのことを変えようとしましたが、何も助けにならないでしょう。プロジェクトを受け取り、コピーして、このクラスとmain.cpp以外のすべてを削除し、エラーはありませんでした。元のプロジェクト(Qt Creatorを再読み込み)に戻って失敗し続けました。私は何らかの矛盾が生じた場合に、メインからランダムに書かれたヘッダファイルをコメントアウトし始めました。それぞれをコメントアウトした後、私は再コンパイルして実行します。毎回それは失敗し続けるでしょう。最後のものの後、それは働いた。それから、私はすべてを再び有効にしました。

私の質問は、このような単純なコードでこのタイプのsegfaultが発生する可能性があることです。さらに、コードが変更されていない場合、私の変更が修正するために行ったことはありますか?基本的に、この問題が再び発生するようになったら、エラーはないと確信しています。どのような手順を取るべきですか?

WindowsではQtとQt Creatorを使用していますので、ご注意ください。

は最後に、完成のために、ここでのコードはsetupUI()内にある:

void Login::setupUI() 
{ 
    QVBoxLayout* main = new QVBoxLayout; 
    QHBoxLayout* userBox = new QHBoxLayout; 
    QHBoxLayout* passBox = new QHBoxLayout; 
    txtUser = new QLineEdit; 
    txtPass = new QLineEdit; 
    userBox->addWidget(new QLabel("User Name:")); 
    userBox->addWidget(txtUser); 
    passBox->addWidget(new QLabel("Password:")); 
    txtPass->setEchoMode(QLineEdit::Password); 
    passBox->addWidget(txtPass); 
    main->addLayout(userBox); 
    main->addLayout(passBox); 
    setLayout(main); 
} 

答えて

2

時にはあなたはそれを動作させるためにqmakeのを実行する必要があります。あなたはQtCreatorからそれを正しく行うことができます。

+0

私のヘッダーをコメントアウトしても何とかQMakeが実行されましたか?またQMakeはCtrl + Rで動作しませんか? – Serodis

+0

最初の質問が不明です。メニューを開くようにしてください。Build - > qmakeを実行してください。 – Kath

+0

ケイト、私はこれを自動的に実行したと思います。あなたの答えは素晴らしいです、それは答えが私が扱った多くの問題を修正するようです。私はこれらのタイプの問題のために、プロジェクトを完全に再作成しました(すべての部品を新しい.proに再追加しました)!ありがとうございました! – Serodis