Qt程序在退出时崩溃
我正在创建我的第一个Qt程序之一。我在这里有一个登录表单,然后提供的用户名和密码将被检查到MYSQL数据库。 如果有一个记录使用这个用户名和密码,那么它正在生成一些Qt程序在退出时崩溃,qt,Qt,我正在创建我的第一个Qt程序之一。我在这里有一个登录表单,然后提供的用户名和密码将被检查到MYSQL数据库。 如果有一个记录使用这个用户名和密码,那么它正在生成一些 ui->something->hide(); 运行时没有特殊的Qt控制台输出,但当我按“x”按钮关闭它时,程序崩溃 我以调试模式运行它。 我得到的是: “由于接收到来自操作系统的信号,下位机停止运行 系统。 信号名称:SIGSEGV信号含义:分段故障 可能发生的情况是,您有一个超出范围的对象 当某些内容被删除或不再可访
ui->something->hide();
运行时没有特殊的Qt控制台输出,但当我按“x”按钮关闭它时,程序崩溃
我以调试模式运行它。
我得到的是:
“由于接收到来自操作系统的信号,下位机停止运行
系统。
信号名称:SIGSEGV信号含义:分段故障
可能发生的情况是,您有一个超出范围的对象 当某些内容被删除或不再可访问,然后您尝试访问它时,您将得到此信息 你应该采取两项行动: 如果您在Qt中创建了一个对象,请将其放在堆上,然后在对象树中将其作为父对象 例如:
QLabel * label = new QLabel(); // put it on the heap using new
ui->centralWidget()->layout()->addWidget(label);
您的标签现在位于对象树中。标签的父对象是布局对象。它的父对象是中心小部件。它的父对象是ui
当窗口关闭时,它将自动清理所有子项,或者换句话说,您不必对每个子项都调用delete
偶尔,示例会显示堆之外的内容,但在较大的示例中,这通常不会很好地工作,除非它是一个像对话框这样的短期项目,在其他任何地方都不会被引用
此外,在closeEvent()中,您应该清理对数据库的访问。查看数据库示例,找到用于关闭数据库句柄的代码行
如果您正在清理,并且在运行时它可能不可用,您应该检查
if(label)
label->setText("I am closing now");
在某些情况下,您可能希望在删除或关闭指针后将其设置为零
希望这有帮助。尝试检查堆栈框架,例如使用GDBC,您可以在此处发布一些代码吗?如果仅通过查看此程序集无法判断问题所在,则应扔掉计算机并放弃编程:D