如何在QTimer中检查QtDesigner生成的小部件点的有效性?

时间:2017-06-08 19:29:50

标签: qt crash

在我的QDialog代码中,我有以下内容:

throw ex;

问题是,如果我在计时器触发前关闭对话框,QTimer::singleShot(2 * 1000, [&] { if (theme_download_label) { theme_download_label->hide(); theme_download_label->setText("text"); } }); 会崩溃。怎么处理这个?

我已尝试在theme_download_label->setText方法之前将theme_download_label设置为Q_NULLPR无效。

1 个答案:

答案 0 :(得分:1)

  1. 小部件的来源无关紧要,或者它是否是小部件。任何QObject的解决方案都是相同的。

  2. 为连接提供QObject上下文。当上下文对象死亡时,它会断开连接,因此不会调用仿函数。

  3. 如果计时器超过this,则将指针按值传递给标签,而不是按引用传递。这可能是导致事故发生的原因。

  4. 无需检查theme_download_label是否为空:它不可能。这是与上下文对象的连接的不变量:设计保证上下文对象是活的。

    QTimer::singleShot(2 * 1000, theme_download_label, [label = theme_download_label] {
        label->hide();
        label->setText("text");
    });