Ошибка сегмента после установки нового публичного сигнала в QT - PullRequest
2 голосов
/ 07 февраля 2011

Я просто мокну от Qt, я пытаюсь вытащить строку из QlineEdit и добавить ее в QTextBrowser после нажатия кнопки (для простоты / проверки ошибок я просто добавляю слово, добавленное кмомент).

Программа запускается, и на экране появляется 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");
}

Ответы [ 2 ]

3 голосов
/ 07 февраля 2011

stdoutput в вашей функции applySettings() относится к члену класса TCD2_GUI, тогда как stdoutput в вашем фрагменте кода, где происходит сбой, является локальной переменной. Попробуйте добавить в свой конструктор пример:

stdoutput = new QTextBrowser();

и удалите следующую строку из вашего кода:

QTextBrowser stdoutput = new QTextBrowser();
1 голос
/ 07 февраля 2011

глядя на предоставленный код, я думаю, что stdoutput объявляется дважды.Один раз как член класса * TCD2_GUI *, второй раз как локальная переменная в методе (конструкторе класса?), Где вы делаете макет. ApplySettings использует член класса, который не инициализирован, следовательно, ошибка сегментации.

Изменение кода на:

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

может решить проблему.

надеюсь, это поможет, с уважением

...