2016-09-30 608 views
-1

我正在创建我的第一个Qt程序之一。我有这个登录表单,然后提供的用户名和密码将被检查到MYSQL数据库。 如果这个用户名和密码的记录,那么就做一些退出Qt程序崩溃

ui->something->hide(); 

有没有特别的Qt的控制台输出运行时,但是当我用“X”按钮来关闭它的程序崩溃。

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

“的劣质停止,因为它从操作系统 系统接收的信号 信号名称:SIGSEGV信号含义:分段故障

+1

尝试检查堆栈帧例如与gdb – Trevir

+1

你可以在这里发布一些代码? – PRIME

+1

如果仅仅通过查看这个程序集就无法确定问题是什么,那么应该扔掉计算机并放弃编程:D – dtech

回答

0

也许正在发生的事情是,你必须这是走出去的范围对象。

当事情被删除,或不再可访问,然后您尝试访问它,你就会得到这个。

个两个动作,你应该采取:

如果创建Qt中的一个对象,把它放在一堆,然后父母就在对象树。

例如:

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

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

你的标签,现在是在对象树。标签的父级是布局对象。它的父母是中心部件。它的父母是ui。

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

偶尔例子表明不上堆的东西,但通常除非是像没有其他地方引用对话框中的短命的项目并不在大规模的例子很好地工作。

也在你的closeEvent()你应该清理对你的数据库的访问。查看数据库示例并查找用于关闭句柄到数据库的代码行。

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

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

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

希望有所帮助。