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

问题描述

因特殊限制,利用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显示的地图只有一下,一闪就没了,变成空白显示了,请问如何解决?

解决方案

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

时间: 2024-09-14 10:22:50

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

利用WPS表格函数自动汇总中考报名册

         一年一度的中考报名已经开始了,招生办小牛又在为汇总全县中考报名情况而忙碌着,一会儿"筛选",一会儿"排序",弄得满头大汗,两眼发直.看到他这副狼狈像,我向他提议利用WPS表格函数自动汇总,并手把手地把函数设置的方法告诉了他. 一.建立报名表册 在全县统一的中考报名表格中输入学生报名信息,若是县级招办,直接将各乡镇上报的数据复制到表格中即可.(如图一) 按照县的要求,填报高中的学生,在高中栏内填"1",大专填"2&quo

散列函数-利用单向hash函数找k阶碰撞过程中如何实现高位存储

问题描述 利用单向hash函数找k阶碰撞过程中如何实现高位存储 我用SHA作为散列函数,希望在2^160的空间中找2^30个k阶碰撞数据.但是我申请不了这么大的数组,急求有没有什么方法或思想可以实现? 解决方案 http://bbs.csdn.net/topics/391821832http://hunteagle.iteye.com/blog/118551

用户口令保密-利用哈希函数的技术实现两个安全需求

问题描述 利用哈希函数的技术实现两个安全需求 在一个广域网的应用环境,用户使用用户名和口令的方式登入到远程的服务器上,服务器的管理员给每个用户设置一个初始口令,请利用哈希函数的技术实现以下安全需求. 1. 用户口令在广域网上安全传输(也就是说,即使攻击者窃取用户网上传输的信息,也分析不出口令). 2. 管理员也不知道用户的口令. ** 请设计一个方案满足上述的安全需求并分析其安全性.**

vc++-如何利用按钮调用函数

问题描述 如何利用按钮调用函数 比如说ontimer函数,如何实现按下button1,然后ontimer函数才开始启动,不要自动启动,谢谢了 解决方案 你在 button1 的响应函数中,加入启动 Timer 的代码就可以. 但要防止 button1 按键多次按下的情况 解决方案二: 定时器默认不可用,点击时可用,就这样 解决方案三: 按下按钮settimer,按下停止killtimer 程序启动不要立刻创建 timer 解决方案四: 其实很简单,先设置好Enable为false,然后按钮点击的

iOS 基本动画、关键帧动画、利用缓动函数实现物理动画效果_IOS

iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果 先说下基本动画部分 基本动画部分比较简单, 但能实现的动画效果也很局限 使用方法大致为: #1. 创建原始UI或者画面 #2. 创建CABasicAnimation实例, 并设置keypart/duration/fromValue/toValue #3. 设置动画最终停留的位置 #4. 将配置好的动画添加到layer层中 举个例子, 比如实现一个圆形从上往下移动, 上代码: //设置原始画面 UIView *showView = [[UI

利用js escape函数解决ajax中文乱码问题

利用js escape函数解决中文乱码问题 本来网页特效中的escape()是将中文按iso-8859-1字符集进行url编码的,那样通过 request.getparameter()是能直接获取到请求参数的,但后来的javascript将escape()换成了unicode字符集编 码,如此一来,在jsp教程和servlet中就没法直接拿到请求参数了,具体原因我也不知道.  解决办法:         1.首先对中文字符进行两次escape()编码,如要传参数name,值为"你好",

php函数的返回值

返回值 用户空间函数利用return关键字向它的调用空间回传信息, 这一点和C语言的语法相同. 例如: function sample_long() { return 42; } $bar = sample_long(); 当sample_long()被调用时, 返回42并设置到$bar变量中. 在C语言中的等价代码如下: int sample_long(void) { return 42; } void main(void) { int bar = sample_long(); } 当然, 在

王亟亟的Python学习之路(10)-函数对象的作用域,函数作为返回值,闭包

转载请注明出处:王亟亟的大牛之路 本来打算把工作的事周末做掉点,但是发现在外面浪并不能迅速集中投入,为了避免不必要的BUG 还是明天在家做吧,那么久写一篇Python的文章吧,毕竟背着Mac出门不做些太对不起自己的肩膀了 废话不多,直接说内容,这篇文章的内容大致是围绕"闭包"走的,介绍下相关理论知识 作用域:对象有其存活的范围 闭包:内部函数可以引用外部函数的参数和局部变量(是不是听得云里雾里的,没事 看例子就明白了) 就像循环内声明的对象,除了循环也就无法获取他的值一样.就像在jav

对象的初始化-用函数的返回值初始化一个类对象,这其中用了几次复制构造函数

问题描述 用函数的返回值初始化一个类对象,这其中用了几次复制构造函数 这是我自己写的一段代码#includeusing namespace std;class Example{int num;public:Example(int i){num=i;cout<<""This is construction with parameter.n"";}Example(){num=0;cout<<""This is construc