今天使用VS2015开发Qt项目做绘制频谱功能,发现实时改变的文字(红圈中文字)会在一段时间后消失。
问题代码部分
代码块语法遵循标准markdown代码,例如:
void DLText::BuildFont()
{
HFONT font = CreateFont(
-m_iFontSize,/*高度*/
m_iFontSize,/*宽度*/
0,/*不用管*/
0,/*不用管*/
FW_NORMAL, /*一般这个值设为400*/
FALSE,/*不带斜体*/
FALSE,/*不带下划线*/
FALSE,/*不带删除线*/
DEFAULT_CHARSET, //这里我们使用默认字符集,还有其他以 _CHARSET 结尾的常量可用
OUT_CHARACTER_PRECIS,
CLIP_CHARACTER_PRECIS, //这行参数不用管
DEFAULT_QUALITY, //默认输出质量
FF_DONTCARE, //不指定字体族*/
m_strFontName.toStdWString().c_str()//字体名
);
SelectObject(m_HDC, font); //选择字体
DeleteObject(font);
}
其中m_HDC是DC的句柄.
当红色范围内的文字消失后就会报错,并打印错误信息
QWindowsBackingStore::flush: GetDC failed (句柄无效。)
或者
QWindowsBackingStore::flush: GetDC failed ()
看看任务管理器打开GUI选项,GUI对象一直增加
解决办法就是最后两行改为
HFONT oldFont = (HFONT)SelectObject(m_HDC, font);
DeleteObject(font);
DeleteObject(oldFont);