qt开发的界面程序,使用qwt显示曲线,每秒定时刷新,程序运行一段时间之后,程序会卡顿,再打开窗口会程序崩溃,运行vld查看内存泄漏情况,未发现有内存泄漏现象,但是程序就是运行卡顿,所以编译出debug版本,在cmd窗口下运行程序,长时间运行,发现崩溃的时候报的错误是QEventDispatcherWin32::registerTimer: Failed to create a timer (),网上查的是句柄超过限制,但是程序打开文件次数有限,不是重复打开。最后查了代码,原因是在定时刷新的操作里面,为了刷新报警信息,需要操作一个label,代码如下:
void updateAlarmTime()
{
QString alarm_time_string;
if (0 != m_AlarmTimePntRtValue)
{
alarm_time_string = "报警时间:" + alarm_time_string + QString::number(m_AlarmTimePntRtValue,10,4);
}
//因为不停的把一个label添加到工具栏中即addWidget(&m_AlarmTimeLabel),导致了错误
m_AlarmTimeLabel.setStyleSheet(" QLabel{ color: red }");
m_pToolBar->addWidget(&m_AlarmTimeLabel);
m_AlarmTimeLabel.setText(alarm_time_string);
}
应该在构造函数中,initUI的时候执行一次:
void initUI()
{
m_AlarmTimeLabel.setStyleSheet(" QLabel{ color: red }");
m_pToolBar->addWidget(&m_AlarmTimeLabel);
}
在需要更新label的内容时候:
m_AlarmTimeLabel.setText(alarm_time_string);
在程序出现莫名其妙的崩溃的时候,最好打开cmd窗口去执行程序,能获取到更多的提示信息。