2 stone2323 stone2323 于 2014.06.17 20:26 提问

因特殊限制,利用QWidget的函数getDC()返回的hdc绘图,只闪一次就被覆盖,

因条件限制:使用第三方动态库底层绘制地图图像,该库使用windows的GDI调用进行绘制,需要给该库提供一个hdc作为输出结果。
我在paintEvent函数中执行QWidget的getDc()函数可以返回该Widget的hdc,传递给动态库绘图后,界面只闪一下绘制图像就变成空白,请问如何让返回的hdc结果正确在QWidget上显示??
代码如下:
void myWidget::paintEvent(QPaintEvent * event)
{
HDC hdc = this->getDC();

thirdLibrary.outPut(hdc);//注解如下
/*该函数主要调用windows GDI将地图绘制在
传递进去的hdc中,并提供给我调用,可将该函数理解为
void output(HDC hdc)
{
    TextOut(hdc,0,0,"地图",2);
    ...等等类似windows GDI函数
}
*/
this->releaseDC();

}
库将地图绘制到hdc上之后,Qt显示的地图只有一下,一闪就没了,变成空白显示了,请问如何解决?

1个回答

lym753024200
lym753024200   2014.06.17 22:55

把你的TextOut函数放到WM_PAINT消息对应的消息处理逻辑下,估计你的程序经常收到WM_PAINT消息,并且在这个消息内也有绘制逻辑使窗口重绘了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
在Qt Widget中使用QPainter之外的引擎进行绘图
发布者:巫师、海绵   时间:2013-02-23 09:36:04      最近在给自己的播放器(https://github.com/wang-bin/QtAV)加写非QPainter的渲染方式,解决了一些以前没碰到过的问题。     在QWidget中使用其他方式绘图,比如direct2d,gdi等(我刚学的)    1. 重载paintE
Qt5.2后的一种新的使用GDI绘图的方法
Qt使用GDI绘图关键在于获取HDC,对于Qt5来说,以前有两种方法。1、使用gui-privatepro或pri文件中增加QT += gui-private代码:#include <qpa/qplatformnativeinterface.h> QPlatformNativeInterface *fooPlatformNativeInterface= QGuiApplicatio...
工作线程的全局函数中如何控制picture control进行图像显示
我们知道在对话框类class Ctldmfc1Dlg : public CDialogEx获取控件的CDC *pDC=GetDlgItem(ID)->GetDC();//CWnd::GetDlgItem()返回ID标示的控件或者子窗口的指针,然后h获取CDC类的指针,图形指针, HDC hDC=pDC->GetSafeHdc();//获取pDC指向的设备的句柄 CRect rect; GetDlgI
游戏编程笔记-起步(二)在窗口上绘图
游戏编程笔记-起步(二) 2.在窗口上绘图         看了我上面的分析,我想,很多朋友都迫不及待的想学这部分知识,原因是上面的知识实在太简单了,只要稍懂点算法的同胞们都可以看懂。关键是大家苦于英雄无勇武之地啊!学了n年的算法,做了n到算法题,却写不出一个如此简单的小游戏。 那好,让我们开始我们真正的游戏编程之旅吧! 1.概述        在Windows上绘图
CreateCompatibleDC CreateCompatibleBitmap SelectObject详解
物理HDC 设备底层会拥有显存等资源,但是兼容DC并没有给图像像素提供内存空间,因此兼容DC总是和BITMAP配合使用,这样一来,兼容DC就利用BITMAP的图像像素数据空间给自己提供类似于显存的内存空间.这样有很多好处,以来我们可以在加载图片后,在图片上利用DC的各种绘图功能.请看如下示例:兼容DC在建立之初,只有1*1像素的尺寸,SelectObject选择bitmap以后才可以进行绘
用MFC中的三种绘图设施::GetDC CClientDC CWindowDC同时实现画线功能
下面用标题中的三种绘图函数,实现在对话框界面上点击一个位置不松开鼠标,拖动到另一个位置抬起鼠标实现画线的功能。 ::GetDC 这个是个全局函数,调用起来比较繁琐,但是正是因为这样,才会理解后面的包装函数都自动做了那些事情。 鼠标按下的事件响应函数: 该函数只保存起点位置 void CMFCApplication1Dlg::OnLButtonDown(UINT nFlags,
VC 在电脑屏幕上绘图
在windows编程中,通常的绘图就是DC(设备上下文),
qt获取窗口句柄来显示图片
winId() 函数能够返回 当前Widget的HWND句柄,我想通过这个窗口句柄实现额外的操作,比如绘制图像或者将句柄传递给第三方功能库操作。 下面的程序是我的Demo程序,我想在QLable上通过HWND句柄绘制一条线,但结果是,线看不到,这是为什么呀? #include #include class MyLabel : public QLabel { public:
Win32学习笔记——画图方法
画图方法:1.获取设备环境  HDC hdc;  hdc=BeginPaint(HWND,LPPAINTSTRUCT);//开始画图(获取设备环境)----------EndPaint(HWND,LPPAINTSTRUCT);//结束画图  hdc=GetDC(HWND);//开始画图(获取设备环境-功能更强)-------------ReleaseDC(HWND);//结束画图3.设置画笔 
使用绘图句柄HDC在客户区、非客户区、临时客户区绘图
首先要知道对于一个窗体,什么是客户区,什么是非客户区。例如下面一个窗体: 客户区是指:红色框框所围住的白色区域。 非客户区是指:包括蓝色标题栏、蓝色边框、白色区域在内的整个窗体。 1、客户区绘图:WM_PAINT是客户区显示更新消息,所有客户区绘图都要在此消息回调时绘制,也就是OnPaint()函数中进行绘制,以BeginPaint()开始,以EndPaint()结束。 v