2

我刚刚用 Qt 弄湿了我的脚,我试图从 QlineEdit 中拉出字符串,并在单击按钮后将其附加到 QTextBrowser(为了简单/错误检查,我现在只是让它附加了附加的单词)。

程序运行,GUI 出现在屏幕上,但是每当我单击按钮时,我的程序段错误。

这是我的代码,我删掉了很多不必要的内容:

标题:

#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");
}
4

2 回答 2

3

stdoutput在您的applySettings()函数中引用该类的成员,TCD2_GUI而在您的代码中发生崩溃的 stdoutput 是一个局部变量。尝试通过示例添加您的构造函数:

stdoutput = new QTextBrowser();

并从您的代码中删除以下行:

QTextBrowser stdoutput = new QTextBrowser();
于 2011-02-07T00:39:48.943 回答
1

查看提供的代码,我的猜测是stdoutput被声明了两次。一次作为 *TCD2_GUI* 类的成员,第二次作为您进行布局的方法(类构造函数?)中的局部变量。ApplySettings使用未初始化的类成员,因此出现分段错误。

将您的代码更改为:

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

可能会解决问题。

希望这会有所帮助,问候

于 2011-02-07T00:33:27.427 回答