Qt程序在退出时崩溃

时间:2016-09-30 14:49:54

标签: qt

我创建了我的第一个Qt程序之一。我已经获得了这个登录表单,然后将提供的用户名和密码检查到MYSQL数据库。 如果有一个包含此用户名和密码的记录,那么它正在制作一些

ui->something->hide();

运行时没有特殊的Qt控制台输出,但当我用" x"关闭它时按钮程序崩溃。

我在调试模式下运行它。 我得到了什么:

  

"下级停止是因为它收到了来自操作的信号   系统。   信号名称:SIGSEGV信号含义:分段故障

1 个答案:

答案 0 :(得分:0)

可能发生的事情是你有一个超出范围的对象。

当某些内容被删除或无法访问时,然后您尝试访问它,您将获得此内容。

你应该采取两项行动:

如果在Qt中创建一个对象,则将其放在堆上,然后在对象树中将其作为父对象。

例如:

QLabel * label = new QLabel();  // put it on the heap using new

ui->centralWidget()->layout()->addWidget(label);

您的标签现在位于对象树中。标签的父级是Layout对象。它的父级是中央小部件。它的父母是ui。

当窗口关闭时,它会自动清理所有孩子,换句话说,你不必在每个孩子上调用删除。

有时,示例会显示堆上的内容,但在较大的示例中通常不能很好地工作,除非它是一个短暂的项目,比如在其他任何地方都没有引用的对话框。

同样在您的closeEvent()中,您应该清理对数据库的访问权限。查看数据库示例,找到用于关闭数据库句柄的代码行。

如果您正在清理并且有可能在运行时无法使用,则应检查。

if(label)
    label->setText("I am closing now");

在某些情况下,您可能希望在删除或关闭指针后将其设置为零。

希望有所帮助。