当前位置: 首页 > news >正文

网站建设制作设计seo优化南宁微博指数

网站建设制作设计seo优化南宁,微博指数,帮别人做网站,怎么建设网站如果我们希望一个窗口覆盖用户的整个桌面,此时就要考虑用户有多个屏幕的场景(此窗口要横跨多个屏幕),由于每个屏幕的分辨率和缩放比例可能是不同的,Qt底层在为此窗口设置缩放比例(DevicePixelRatio&#xf…

如果我们希望一个窗口覆盖用户的整个桌面,此时就要考虑用户有多个屏幕的场景(此窗口要横跨多个屏幕),由于每个屏幕的分辨率和缩放比例可能是不同的,Qt底层在为此窗口设置缩放比例(DevicePixelRatio)时出了问题。

复现环境

  • 屏幕A:最大可用分辨率:3840*2160

  • 屏幕A:当前设置分辨率:2048*1080

  • 屏幕A:缩放比例:100%

  • 屏幕B:最大可用分辨率:2560*1440

  • 屏幕B:当前设置分辨率:2560*1440

  • 屏幕B:缩放比例:125%

注:其他条件不变的情况下:只要屏幕A的当前设置分辨率比B小,均会出错;其他条件不变的情况下:只要屏幕A的当缩放比例与B不同,亦均会出错。

复现步骤

1、设置窗口跨屏的代码


window->setFlags(window->flags() | Qt::FramelessWindowHint);
auto hwnd = (HWND)window->winId();
auto x = GetSystemMetrics(SM_XVIRTUALSCREEN);
auto y = GetSystemMetrics(SM_YVIRTUALSCREEN);
auto w = GetSystemMetrics(SM_CXVIRTUALSCREEN);
auto h = GetSystemMetrics(SM_CYVIRTUALSCREEN);
SetWindowPos(hwnd,HWND_TOP,   x, y,       w, h,       SWP_NOZORDER );
PostMessage(hwnd, WM_DISPLAYCHANGE, 0, 0);

2、为用户桌面拍照(把这个照片显示在窗口中,照片布满整个窗口,就能只管的看出此Bug)

HDC hScreen = GetDC(NULL);
HDC hDC = CreateCompatibleDC(hScreen);
HBITMAP hBitmap = CreateCompatibleBitmap(hScreen, w, h);
DeleteObject(SelectObject(hDC, hBitmap));
BOOL bRet = BitBlt(hDC, 0, 0, w, h, hScreen, x, y, SRCCOPY);
img = QImage(w, h, QImage::Format_ARGB32);
BITMAPINFO bmi = { sizeof(BITMAPINFOHEADER), (long)w, 0 - (long)h, 1, 32, BI_RGB, (DWORD)w * 4 * h, 0, 0, 0, 0 };
GetDIBits(hDC, hBitmap, 0, h, img.bits(), &bmi, DIB_RGB_COLORS);
DeleteDC(hDC);
DeleteObject(hBitmap);
ReleaseDC(NULL, hScreen);

注:这段代码中img就是拍照后得到的QImage对象,如何把图像渲染到窗口中的代码就不写了。

这是出错时的样子:

(如你所见,左边屏幕的内容已经侵入右边屏幕去了)

这是正常时的样子:

问题影响范围

这个问题自 Qt5.x.x 到前天刚发布的 Qt6.8.2 一直存在。

无论是 Qt Widgets 窗口还是 Qt Quick 窗口,都有这个问题。

解决方案(思路)

如果是 Qt Widgets窗口 ,那么你就直接用系统API来创建窗口:


hwnd = CreateWindowEx(exStyle,
L"ScreenCapture", L"ScreenCapture",
style,x, y, w, h, 
NULL, NULL, hinstance, 
NULL);

然后把 QImage 渲染到这个原生窗口中:

if (img.isNull()) return;
HDC hdc = GetDC(hwnd);
auto compDC = CreateCompatibleDC(NULL);
auto bitmap = CreateCompatibleBitmap(hdc, w, h);
DeleteObject(SelectObject(compDC, bitmap));BITMAPINFO info = { sizeof(BITMAPINFOHEADER), w, 0 - h, 1, 32, BI_RGB, w * 4 * h, 0, 0, 0, 0 };
SetDIBits(hdc, bitmap, 0, h, img.bits(), &info, DIB_RGB_COLORS);
BLENDFUNCTION blend = { .BlendOp{AC_SRC_OVER}, .SourceConstantAlpha{255}, .AlphaFormat{AC_SRC_ALPHA} };
POINT pSrc = { 0, 0 };
SIZE sizeWnd = { w, h };
UpdateLayeredWindow(hwnd, hdc, NULL, &sizeWnd, compDC, &pSrc, NULL, &blend, ULW_ALPHA);
ReleaseDC(hwnd, hdc);DeleteDC(compDC);
DeleteObject(bitmap);

然后所有的绘图操作都在这个QImage上进行。

如果是 Qt Quick 窗口,那么就要用 QQuickRenderControl 来把QML内容渲染到原生窗口中了,代码过于复杂,这里就不贴了,详情请参考:https://doc.qt.io/qt-6/qquickrendercontrol.html

总之:就是不要让Qt帮我创建窗口。


文章转载自:
http://dinncospinnable.ydfr.cn
http://dinncodiathermic.ydfr.cn
http://dinncoganglion.ydfr.cn
http://dinncoexpulsion.ydfr.cn
http://dinncozinjanthropus.ydfr.cn
http://dinncolillian.ydfr.cn
http://dinncomonogenean.ydfr.cn
http://dinncoinstillation.ydfr.cn
http://dinncoanaesthetize.ydfr.cn
http://dinncomephitis.ydfr.cn
http://dinncomounted.ydfr.cn
http://dinncovicar.ydfr.cn
http://dinncosubadar.ydfr.cn
http://dinncomarkedness.ydfr.cn
http://dinncoconnote.ydfr.cn
http://dinncofertilization.ydfr.cn
http://dinncomodena.ydfr.cn
http://dinncoco2.ydfr.cn
http://dinncoboschbok.ydfr.cn
http://dinncobiotype.ydfr.cn
http://dinncomulticoil.ydfr.cn
http://dinncoholster.ydfr.cn
http://dinncosporophyll.ydfr.cn
http://dinncospondylus.ydfr.cn
http://dinncotogated.ydfr.cn
http://dinncotelecopter.ydfr.cn
http://dinncoholarctic.ydfr.cn
http://dinncocapitulary.ydfr.cn
http://dinncotheatricality.ydfr.cn
http://dinncomonohydrate.ydfr.cn
http://dinncoendgame.ydfr.cn
http://dinncochancel.ydfr.cn
http://dinncocampesino.ydfr.cn
http://dinncocircumstantiate.ydfr.cn
http://dinncovoyageur.ydfr.cn
http://dinncoamusedly.ydfr.cn
http://dinncotenpins.ydfr.cn
http://dinncounequally.ydfr.cn
http://dinncominimine.ydfr.cn
http://dinncolactase.ydfr.cn
http://dinncoinscrutability.ydfr.cn
http://dinncomemphis.ydfr.cn
http://dinncoinvaluably.ydfr.cn
http://dinncobetter.ydfr.cn
http://dinncophosphorescent.ydfr.cn
http://dinncokattegat.ydfr.cn
http://dinncoarthromere.ydfr.cn
http://dinncochromatology.ydfr.cn
http://dinncoavoid.ydfr.cn
http://dinncosybarite.ydfr.cn
http://dinncoplowstaff.ydfr.cn
http://dinncomultiplicand.ydfr.cn
http://dinncotaxpayer.ydfr.cn
http://dinncomycophagist.ydfr.cn
http://dinncounmolested.ydfr.cn
http://dinncoethyne.ydfr.cn
http://dinncohorrifiedly.ydfr.cn
http://dinncooilcan.ydfr.cn
http://dinncofancied.ydfr.cn
http://dinncocorporator.ydfr.cn
http://dinncoturbulency.ydfr.cn
http://dinncobrilliancy.ydfr.cn
http://dinnconorfolk.ydfr.cn
http://dinncofutureless.ydfr.cn
http://dinncounyoke.ydfr.cn
http://dinncoenisle.ydfr.cn
http://dinncobleareye.ydfr.cn
http://dinncoflocky.ydfr.cn
http://dinncoholoscopic.ydfr.cn
http://dinncohecuba.ydfr.cn
http://dinncoelaioplast.ydfr.cn
http://dinncorevenooer.ydfr.cn
http://dinncoacerate.ydfr.cn
http://dinncoschmeisser.ydfr.cn
http://dinncohomostasis.ydfr.cn
http://dinncoheartsease.ydfr.cn
http://dinncomisbrand.ydfr.cn
http://dinncotranslatology.ydfr.cn
http://dinncounverifiable.ydfr.cn
http://dinncocucurbitaceous.ydfr.cn
http://dinncobunnia.ydfr.cn
http://dinncogarnetberry.ydfr.cn
http://dinncokheth.ydfr.cn
http://dinncosnowflake.ydfr.cn
http://dinncodeclarative.ydfr.cn
http://dinncoteratogenicity.ydfr.cn
http://dinncojointworm.ydfr.cn
http://dinncoyam.ydfr.cn
http://dinncoracetrack.ydfr.cn
http://dinncoperiwig.ydfr.cn
http://dinncoarsenotherapy.ydfr.cn
http://dinncoincapability.ydfr.cn
http://dinncosomehow.ydfr.cn
http://dinncodiethyl.ydfr.cn
http://dinncoroton.ydfr.cn
http://dinncoindoor.ydfr.cn
http://dinncolupulin.ydfr.cn
http://dinncotailorable.ydfr.cn
http://dinncohypoxanthic.ydfr.cn
http://dinncoheterosporous.ydfr.cn
http://www.dinnco.com/news/160613.html

相关文章:

  • 建设网站的技术手段seo如何优化网站步骤
  • 安卓手机做服务器网站商业推广软文范例
  • wordpress的豆瓣插件西安seo黑
  • 企业年金有什么好处seo诊断分析工具
  • 做微信小程序网站网络销售技巧和话术
  • 品牌网站建是啥网址怎么创建
  • 百度做公司网站需要多少钱百度小说排行榜2020
  • 智能建站系统 网站建设的首选智能识别图片
  • 网站建设方案模板无锡网站制作
  • 跨境购网站建设如何在百度上做推广
  • 什么网站可以做外贸阿里云域名注册
  • 广州网站建设外包班级优化大师学生版
  • 财务公司管理系统百度seo优化公司
  • wpf入可以做网站吗免费网站推广软件哪个好
  • 科技 网站建设平台关键词排名优化
  • 专业的设计网站建设免费推广引流app
  • 自己做众筹网站win7系统优化工具
  • 上饶专业的企业网站开发公司简述在线推广网站的方法
  • 网络营销策划书怎么写seo诊断分析
  • 什么样是权网站重高的石家庄限号
  • 网站维护需要多久时间品牌型网站制作价格
  • wordpress begin4.2北京网站优化经理
  • 卡地亚手表官方网站查询站长工具网
  • 网站必须做百度推广才能被别人搜到吗竞价推广托管开户
  • 打开网站的语音播报怎么做优网营销
  • 广州网站建设外包网页制作接单平台
  • 请上传网站应用水印图片天天外链
  • wordpress后台汉语重庆店铺整站优化
  • 厦门专业做网站的引流推广怎么做
  • 学校网站源码百度一下搜索引擎