qt关于程序崩溃

来源:互联网 发布:光猫 lan端口绑定 编辑:程序博客网 时间:2024/06/07 01:38

qt程序崩溃最常见的应该是内存溢出,这是编程习惯造成的,

比如:用Qlist的时候,没有检查Qlist.size()的大小,直接就.at()了,这样就造成程序崩溃。

还有就是指针为NULL,结果做为参数或者直接操作使用。也会造成程序崩溃。

所以任何函数,只要带有参数。一定要对参数进行判断,特别是指针或者引用。

接下来介绍一种奇葩的程序崩溃现象。

第一步,我们在ui界面上添加一个按钮Qpushbutton,和一个QlineEdit,

第二步,在按钮的槽函数中写如下代码;

void Widget::on_pushButton_clicked(){    for (int i = 0; i < 10; i++)    {        ui->lineEdit->setText (i);    }}

然后我们运行程序,我们可以看到界面上只会显示9这个数字;

接着:我们改一下代码:

void Widget::on_pushButton_clicked(){    for (int i = 0; i < 10; i++)    {        ui->lineEdit->setText (i);        QThread::msleep (1);    }}
我们添加一个延时1秒,我们运行后看到的是,9秒后显示的数字是9,之前都没有显示任何数字;

而且会发生一件事情就是,如果你点击其他按钮,或者空白区域会造成程序崩溃;

为什么会造成崩溃,我想不用说大家也清楚吧,因为按钮的点击槽函数还没有执行完成,又点击了其他事件。因为程序是单线程,还在for循环中运行,所以崩溃掉了,

还有一点就 是:明明ui->lineEdit设置了9次文本,为什么只显示了一次,也是因为单线程原因,要等到按钮槽函数运行完之后才会去调用界面的信号;所以,在编码的时候

一定要将耗时比较长的处理事件放到线程去执行,否则程序会出现崩溃或者卡顿。










原创粉丝点击