在我的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
无效。
答案 0 :(得分:1)
小部件的来源无关紧要,或者它是否是小部件。任何QObject
的解决方案都是相同的。
为连接提供QObject
上下文。当上下文对象死亡时,它会断开连接,因此不会调用仿函数。
如果计时器超过this
,则将指针按值传递给标签,而不是按引用传递。这可能是导致事故发生的原因。
无需检查theme_download_label
是否为空:它不可能。这是与上下文对象的连接的不变量:设计保证上下文对象是活的。
QTimer::singleShot(2 * 1000, theme_download_label, [label = theme_download_label] {
label->hide();
label->setText("text");
});