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

运营一个网站要多少钱s上海网站建设

运营一个网站要多少钱,s上海网站建设,如何做自己网站,淮安维度网站建设获取屏幕缩放比 网上很多代码是用 logicalDotsPerInch 除以 96 来获取屏幕缩放比: // Windows 除以 96,macOS 除以 72 qreal factor window->screen()->logicalDotsPerInch() / 96.0; 当使能了缩放适配后,logicalDotsPerInch 值就不…

获取屏幕缩放比

网上很多代码是用 logicalDotsPerInch 除以 96 来获取屏幕缩放比:

// Windows 除以 96,macOS 除以 72
qreal factor = window->screen()->logicalDotsPerInch() / 96.0;

当使能了缩放适配后,logicalDotsPerInch 值就不随系统缩放变了:

#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)// Qt6 默认开启缩放QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
#endif

如果是 PassThrough 支持小数的设置,此时可以用 QScreen 的 devicePixelRatio 获取缩放比。

很明显,我们需要更通用的方式。通过查看源码,发现其实 Qt 内部是有对应接口的,比如 QHighDpiScaling 类的接口:

qreal QHighDpiScaling::rawScaleFactor(const QPlatformScreen *screen)
{// Determine if physical DPI should be usedstatic const bool usePhysicalDpi = qEnvironmentVariableAsBool(usePhysicalDpiEnvVar, false);// Calculate scale factor beased on platform screen DPI valuesqreal factor;QDpi platformBaseDpi = screen->logicalBaseDpi();if (usePhysicalDpi) {QSize sz = screen->geometry().size();QSizeF psz = screen->physicalSize();qreal platformPhysicalDpi = ((sz.height() / psz.height()) + (sz.width() / psz.width())) * qreal(25.4 * 0.5);factor = qreal(platformPhysicalDpi) / qreal(platformBaseDpi.first);} else {const QDpi platformLogicalDpi = QPlatformScreen::overrideDpi(screen->logicalDpi());factor = qreal(platformLogicalDpi.first) / qreal(platformBaseDpi.first);}return factor;
}

其中  usePhysicalDpi 一般我们也用不到,所以可以直接用 else 部分的逻辑。不过这里用到了 QPlatformScreen 类,需要引入 gui-private 模块:

QT += core gui widgets 
QT += gui-private

简单的测试:

void MainWindow::calcDpi()
{// 可以从 QWidget 或者 QWindow 拿到 QScreen 对象QScreen *cur_screen = this->screen();qDebug()<<__FUNCTION__<<cur_screen;if (cur_screen) {// 逻辑 dpi (logicalBaseDpi().first) 默认值 win 96/ mac 72const QDpi base_dpi = cur_screen->handle()->logicalBaseDpi();const QDpi logic_dpi = QPlatformScreen::overrideDpi(cur_screen->handle()->logicalDpi());// 得到屏幕缩放百分比const qreal factor = qreal(logic_dpi.first) / qreal(base_dpi.first);qDebug()<<"calc dpi"<<factor;}
}

关联屏幕设置变化

当在多个屏幕拖动,或者修改当前屏幕缩放比后,我们需要重新获取缩放比。

QWindow 提供了 screenChanged 信号可以感知屏幕切换。

QScreen 提供了 physicalDotsPerInchChanged 和 logicalDotsPerInchChanged 信号可以感知分辨率变化。

在 Widgets 中的大致代码就是:

void MainWindow::initWindow()
{qDebug()<<this->winId();// 构造的时候 windowHandle 还未初始化,可以等 show 的时候关联,或者先调用一次 winIdconnect(this->windowHandle(), &QWindow::screenChanged, this, &MainWindow::onScreenChange);calcDpi();
}void MainWindow::onScreenChange(QScreen *screen)
{// QMetaObject::Connection 保存连接便于释放;if (logicalDpiConnection) {disconnect(physicalDpiConnection);disconnect(logicalDpiConnection);}if (screen) {// 切换缩放比时,EnableHighDpiScaling 会触发 physicalDotsPerInchChanged// 此时 Qt6 不触发 logicalDotsPerInchChangedphysicalDpiConnection = connect(screen, &QScreen::physicalDotsPerInchChanged, this, &MainWindow::calcDpi);logicalDpiConnection = connect(screen, &QScreen::logicalDotsPerInchChanged, this, &MainWindow::calcDpi);calcDpi();}
}void MainWindow::calcDpi()
{// 可以从 QWidget 或者 QWindow 拿到 QScreen 对象QScreen *cur_screen = this->screen();qDebug()<<__FUNCTION__;if (cur_screen) {// 逻辑 dpi (logicalBaseDpi().first) 默认值 win 96/ mac 72const QDpi base_dpi = cur_screen->handle()->logicalBaseDpi();const QDpi logic_dpi = QPlatformScreen::overrideDpi(cur_screen->handle()->logicalDpi());// 得到屏幕缩放百分比const qreal factor = qreal(logic_dpi.first) / qreal(base_dpi.first);qDebug()<<"calc dpi"<<factor;}
}

完成示例代码:

QWidget 获取 DPI 缩放:https://github.com/gongjianbo/MyTestCode/tree/master/Qt/TestQt_20231221_Dpi

QML 获取 DPI 缩放:

https://github.com/gongjianbo/MyTestCode/tree/master/Qml/TestQml_20231221_Dpi

http://www.yayakq.cn/news/507728/

相关文章:

  • 连云港做网站哪里好网站搭建分站需要多少钱
  • 百度提交入口网站网址行业门户网站大全
  • 网站公司维护网站空间多少
  • 做网站多少分辨率好著名的国外设计网站
  • wordpress自定义排版seo网站编辑
  • wordpress评论 ajaxwordpress神马优化
  • 中国建设银行幼儿缴费官网站深互动平台网站
  • 广州车陂网站建设中心怎样免费注册域名
  • 高端品牌鞋子潍坊外贸网站优化
  • 河北中瑞建设集团有限公司网站电子印章制作生成免费
  • 做网站比特币钱包秦皇岛昌黎县建设局网站
  • 扬州网站建设 开元本地工程招标网
  • 陕西省建设监理工程协会网站手机设计软件免费
  • 一般网站开发用什么笔记本东莞如何建网站费用
  • 专业做化学招聘的网站有哪些f式布局网站
  • 网站开发简历项目WordPress底部添加音乐
  • 网盘做电子书下载网站外呼系统电销
  • 如何建立公司网站模块百度 手机网站 收录
  • 怎么改版网站定制软件公司
  • 女性开源网站前端程序员工资一般多少
  • 西安做网站费用站酷设计网站官网未上色文件
  • 海拉尔网站设计android用什么语言开发
  • 品牌网站制作选哪家开发的某网站建设公司网站源码
  • 兰溪做网站韩国在中国做美食的视频网站有哪些
  • 头像在线制作网站做网站推广的公司好做吗
  • 做网站需注意事项怎样做一个企业的网站建站
  • 北京高端网站建设有限公司wordpress 弹出窗口
  • 如何查看网站所用空间网站优化托管方案文库
  • 怎么做电影网站服务器旅游微信网站建设
  • 自己做网站怎么租服务器计算机好还是软件工程好