Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何开发新的Qt 5.7+高-新闻部每监视器新闻部感知应用程序?

如何开发新的Qt 5.7+高-新闻部每监视器新闻部感知应用程序?
EN

Stack Overflow用户
提问于 2016-10-02 18:42:58
回答 1查看 5.7K关注 0票数 15

我读过官方的Qt文档和许多关于StackOverflow的文章和问题,都是关于Qt中新闻部的支持。所有这些程序都专注于移植旧应用程序,并使它们尽可能少地进行更改。

但是,如果我要启动一个全新的应用程序,并打算支持每个监视器的DPI感知应用程序,那么最好的方法是什么?

如果我正确理解的话,Qt::AA_EnableHighDpiScaling与我想要的完全相反。我实际上应该禁用HighDpiScaling并在运行时手动计算所有维度?

许多建议说,不要使用大小,使用浮动布局。但在许多情况下,希望至少存在最小宽度和/或最小高度。由于Qt设计器只允许我将值放在绝对像素中,那么正确的方法是什么?如果监视器分辨率发生变化,我应该将代码放在哪里重新计算维度?

还是我应该用自动缩放的方法?

我以前的Qt应用程序的解决方案(测试不太好)

在我的一个老应用程序中,我尝试添加HighDPI支持,我使用了这种方法-列出DOM的所有子程序,并按一定比例逐个调整它们的大小。Ratio =1将产生与我在dimensions中指定的维度相等的维度。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    void resizeWidgets(MyApp & qw, qreal mratio)
    {

        // ratio to calculate correct sizing
        qreal mratio_bak = mratio;

        if(MyApp::m_ratio != 0)
            mratio /= MyApp::m_ratio;

        // this all was done so that if its called 2 times with ratio = 2, total is not 4 but still just 2 (ratio is absolute)
        MyApp::m_ratio = mratio_bak;

        QLayout * ql = qw.layout();

        if (ql == NULL)
            return;

        QWidget * pw = ql->parentWidget();

        if (pw == NULL)
            return;

        QList<QLayout *> layouts;

        foreach(QWidget *w, pw->findChildren<QWidget*>())
        {
            QRect g = w->geometry();

            w->setMinimumSize(w->minimumWidth() * mratio, w->minimumHeight() * mratio);
            w->setMaximumSize(w->maximumWidth() * mratio, w->maximumHeight() * mratio);

            w->resize(w->width() * mratio, w->height() * mratio);
            w->move(QPoint(g.x() * mratio, g.y() * mratio));
            
        }

        foreach(QLayout *l, pw->findChildren<QLayout*>())
        {
            if(l != NULL && !(l->objectName().isEmpty()))
                layouts.append(l);
        }
        
        foreach(QLayout *l, layouts) {
            QMargins m = l->contentsMargins();

            m.setBottom(m.bottom() * mratio);
            m.setTop(m.top() * mratio);
            m.setLeft(m.left() * mratio);
            m.setRight(m.right() * mratio);

            l->setContentsMargins(m);

            l->setSpacing(l->spacing() * mratio);

            if (l->inherits("QGridLayout")) {
                QGridLayout* gl = ((QGridLayout*)l);

                gl->setHorizontalSpacing(gl->horizontalSpacing() * mratio);
                gl->setVerticalSpacing(gl->verticalSpacing() * mratio);
            }

        }
        
        QMargins m = qw.contentsMargins();

        m.setBottom(m.bottom() * mratio);
        m.setTop(m.top() * mratio);
        m.setLeft(m.left() * mratio);
        m.setRight(m.right() * mratio);

        // resize accordingly main window
        qw.resize(qw.width() * mratio, qw.height() * mratio);
        qw.setContentsMargins(m);
        qw.adjustSize();
    }

从main调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main(int argc, char *argv[])
{

    QApplication a(argc, argv);
    MyApp w;

    // gets DPI
    qreal dpi = a.primaryScreen()->logicalDotsPerInch();

    MyApp::resizeWidgets(w, dpi / MyApp::refDpi);

    w.show();

    return a.exec();
}

我不认为这是个好办法。考虑到我正在重新开始,并且我可以根据最新的Qt标准完全定制我的代码,我应该使用什么方法来获取HighDPI应用程序呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-02 20:00:28

如果我要启动一个全新的应用程序,目的是支持每一个监测新闻部的意识,什么是最好的方法?

我们不依赖于Qt来自动调整每个监视器的DPI感知模式。至少QT5.7-与Qt::AA_EnableHighDpiScaling集的应用程序不这样做,‘高新闻部缩放’是更准确的绘图,无论像素密度。

要调用每个监视器DPI感知模式,您需要在项目可执行文件所在的同一个目录中修改Qt.conf文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Platforms]
# 1 - for System DPI Aware
# 2 - for Per Monitor DPI Aware
WindowsArguments = dpiawareness=2

# May need to define this section as well
#[Paths]
#Prefix=.

如果我正确理解的话,Qt::AA_EnableHighDpiScaling与我想要的完全相反。我实际上应该禁用HighDpiScaling并在运行时手动计算所有维度?

不,这不是一回事,而是另一回事。有几个Qt错误被关闭为无bug:QTBUG-55449QTBUG-55510显示了该特性背后的意图。顺便说一句,QTBUG-55510提供了一种编程解决方法,用于设置Qt感知而不修复qt.conf (使用自行决定,因为它使用“私有”Qt实现类来更改接口,而无需任何更新的Qt版本通知)。

并且您表达了正确的方法来执行每个监视器DPI感知模式的缩放。不幸的是,当时没有太多的选择。但是,当窗口从一个监视器移动到另一个监视器时,有一些编程方法可以帮助对窗口进行事件处理。在这个问题的开头,像resizeWidget这样的方法(一个,不是很多)应该使用(Windows)这样的方法来调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// we assume MainWindow is the widget dragged from one monitor to another
bool MainWindow::nativeEvent(const QByteArray& eventType, void* message, long* result)
{
   MSG* pMsg = reinterpret_cast<MSG*>(message);

   switch (pMsg->message)
   {
      case WM_DPICHANGED:
         // parameters TBD but mind that 'last' DPI is in
         // LOWORD(pMsg->wParam) and you need to detect current
         resizeWidget(monitorRatio());
         break;

这是相当困难和麻烦的方式,我求助于通过让用户选择该模式并重新启动应用进程(要么修复qt.conf,要么在应用程序开始时从QTBUG-55510中解决),使应用程序能够在System和process新闻部感知模式之间切换。我们的希望是Qt公司意识到,需要每个监视器新闻部感知模式,自动缩放的小部件。我们为什么需要它(?)是另一个问题。在我的例子中,我在自己的app小部件画布中有每个监视器呈现,应该是缩放的。

一开始,我从@selbie上读到对这个问题的评论,我意识到,在应用程序启动时,也许有一种方法可以尝试设置QT_SCREEN_SCALE_FACTORS:

QT_SCREEN_SCALE_FACTORS列表指定每个屏幕的缩放因子。这不会改变点大小字体的大小。此环境变量主要用于调试,或用于处理带有错误EDID信息的监视器(扩展显示标识数据)。

然后,我阅读了关于如何应用多个屏幕因素的Qt博客,并尝试对4K和1080 p监视器执行以下操作,其中首先列出4K (main)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
qputenv("QT_SCREEN_SCALE_FACTORS", "2;1");

这确实有点帮助:几乎正确的呈现,但是引入了窗口大小的缺陷,同时将窗口从一个监视器移动到另一个监视器,就像QTBUG-55449一样。我想,如果客户认为当前的应用程序行为是一个bug,我将使用WM_DPICHANGED + QT_SCREEN_SCALE_FACTORS方法(我们通过System为所有监视器建立了相同的基础)。但是还没有准备好使用Qt的解决方案。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39823918

复制
相关文章
模仿百度新闻的一部分
我们先来复习一下前面的知识,一些常见的标签,和一些不太常用到的标签,以及img标签的一些知识点,都是很重要的基础,千万不能忘记。
守护最温柔的金木
2020/07/26
4780
模仿百度新闻的一部分
移动新闻网站,掌上移动新闻,移动新闻客户端,jQuery Mobile移动新闻网站,移动新闻网站demo,新闻阅读器开发
我们坐在地铁上,常常拿出手机查看新浪移动新闻,腾讯新闻,或者刷微信看新闻等等功能。你们有没有想过他们是如何实现的。移动互联网,越来越热闹了。
业余草
2019/01/21
5.3K0
移动新闻网站,掌上移动新闻,移动新闻客户端,jQuery Mobile移动新闻网站,移动新闻网站demo,新闻阅读器开发
新闻数读 | 30余家;55亿;88%;15部门;3000万;20/100
今日数字 1、30余家——中国广播电视网络有限公司、北京歌华有线电视网络股份有限公司拟联合全国三十余家省市有线电视网络公司,共同成立“中国广电大数据联盟”。 2、55亿—— 英特尔将投资55亿美元升级大连工厂 3、88%——微软当地时间周四发布第一财季财报,微软商业云计算业务营收增长88%。 4、15部门——公安部等15部门将从即日起至明年3月开展专项行动清理整顿危爆品寄递物流。快递包裹即日起开始要实名登记 5、3000万——李彦宏将个人捐赠3000万元,支持百度与北京协和医学院共同发起的针对食管癌基因检测
CDA数据分析师
2018/02/24
8450
数据新闻:全球新闻界的新宠
  数据新闻的前景被看好   2013年6月,由“全球编辑网络(Global Editors Network)”和谷歌赞助的一项新闻作品评选活动公布了该年度获奖名单。8个新闻作品从300多个参赛作品中脱颖而出,获得了最终的“数据新闻奖”。在参与奖项评选的名单中,不仅能看到《卫报》、《金融时报》、BBC、美联社、《得克萨斯论坛报》、《琼斯夫人》杂志等老牌主流媒体的名字,也可以看到ProPublica这样的新兴公共新闻网站和诸多独立数据记者的身影。值得一提的是,欧美媒体并没有垄断参评名单,南美洲、大洋洲、亚洲、
大数据文摘
2018/05/18
2.6K1
【新闻】大数据可视化的新动态
大数据可视化的新动态 Intetix Foundation(英明泰思基金会)由从事数据科学、非营利组织和公共政策研究的中国学者发起成立,致力于通过数据科学改善人类社会和自然环境。通过联络、动员中美最顶尖的数据科学家和社会科学家,以及分布在全球的志愿者,我们创造性地践行着我们的使命:为美好生活洞见数据价值。 1 引言 数据可视化是将数据以不同形式展现在不同系统中,其中包括属性和变量的单位信息[1]。基于可视化发现数据的方法允许用户使用不同的数据源,来创建自定义分析。先进的分析集成了许多方法,为了支持交互式
小莹莹
2018/04/25
1.2K0
【新闻】大数据可视化的新动态
SIGIR 2021 | UPFD:用户偏好感知假新闻检测
题目:User Preference-aware Fake News Detection
Cyril-KI
2022/11/17
1.2K0
SIGIR 2021 | UPFD:用户偏好感知假新闻检测
干货 | 日采100W新闻数据,如何实现新闻自动分类?
信息爆炸的今天,个性化新闻推荐技术已经变成了许多新闻网站和App的关键技术。个性化新闻推荐技术的应用,不只可以减轻信息过载的问题,还可以提升用户的新闻阅读体验,提高用户粘性和留存率。
八爪鱼大数据
2021/08/17
1.5K0
Python爬虫爬取新闻网站新闻
2017年9月16日零基础入门Python,第二天就给自己找了一个任务,做网站文章的爬虫小项目,因为实战是学代码的最快方式。所以从今天起开始写Python实战入门系列教程,也建议大家学Python时一定要多写多练。
conanma
2021/11/01
6.9K0
Wolfram 新闻
产品 Wolfram SystemModeler 5.0 已于7月25日发布: 新博客(https://wolfr.am/nuEss66B) 新功能(http://www.wolfram.com/system-modeler/what-is-new/) 新特性(http://www.wolfram.com/system-modeler/features/) 新文档(https://wolfr.am/nuGdUDBz) 夏校 Wolfram 高中生夏令营和 Wolfram 夏校已经圆满结束!今年是人数最多的一
WolframChina
2018/05/31
1.9K0
​基于ArkUI eTS开发的坚果新闻(NutNews)
作者:坚果 公众号:"大前端之旅" OpenHarmony布道师,华为云享专家,InfoQ签约作者,开源项目GVA成员之一 实现的功能: 获取接口数据 新闻列表 新闻详情页 你能学到的有: 网络请求 可滚动组件 容器组件 路由跳转 基础组件 文件结构 . ├── config.json ├── ets │ └── MainAbility │ ├── app.ets │ ├── data │ │ └── get_test.ets │ ├── model
徐建国
2022/12/05
4690
​基于ArkUI eTS开发的坚果新闻(NutNews)
新闻稿发布,如何写新闻稿有利于SEO?
无论是企业还是媒体网站,我们每天都会接触到新闻稿,它用户对外声明企业与媒体站点的相关产品与重要信息的发布,为了提高新闻稿件的搜索可见性,我们不但要求编辑具备较高的新闻写作素养,同时,基于搜索引擎营销而言,我们还要求新闻稿件相关撰写人,具备一定的SEO知识。
蝙蝠侠IT
2021/07/27
9840
新闻稿发布,如何写新闻稿有利于SEO?
如何使用PYTHON抓取新闻文章
在本文中,我们将讨论如何使用Python抓取新闻报道。这可以使用方便的报纸包装来完成。
用户7466307
2020/09/14
2.4K0
如何使用PYTHON抓取新闻文章
Facebook如何带来新闻消费习惯的革命
虽然Facebook表面只是一家社交网站,但由于上面的内容集成自各个渠道,因而也成为内容厂商的必争之地,对于新闻机构而言尤其如此。正是在这样的背景下,Facebook开始逐渐改变人们的新闻消费习惯。然而,这里面究竟多少喜、又有多少忧,还是来看《纽约时报》是如何评论的吧: Facebook影响巨大 这篇文章的很多读者之所以会阅读本文,是因为26岁的Facebook工程师格雷格·马拉(GregMarra)通过计算认定,这或许很符合他们的偏好。 马拉的团队为Facebook的NewsFeed编写了代码——这是
用户1756920
2018/06/20
4240
模仿腾讯新闻做了款新闻阅读小程序
该新闻组系统的开发主要分为前端的界面设计和后端的功能实现两个部分,前端使用微信小程序组件展示新闻界面,后端采用基于Python语言的 Flask 轻量级框架实现相应功能。
月小水长
2020/09/10
1.5K0
模仿腾讯新闻做了款新闻阅读小程序
本地新闻应用程序news Break募集1.15亿美元
新闻稿称,这一轮的新闻稿使“2021年第一批新独角兽之一”,但这家初创公司拒绝透露其实际估值。
用户8054111
2021/01/14
5440
澎湃新闻网站全站新闻爬虫及各大新闻平台聚合爬虫发布
这个 project 我几年前就有想法了,仓库两年前就推送到了 Github,只不过只有一个 readme 文件,昨晚跨年,清理 Github,这个想法就又强烈了起来,说干就干。
月小水长
2021/01/29
2.1K0
澎湃新闻网站全站新闻爬虫及各大新闻平台聚合爬虫发布
AI新闻报
1.【TV++】这位博士深掘电视用户流量 以内容识别技术跨屏互动 与江苏卫视促成 合作
用户3578099
2019/08/15
5330
腾讯新闻的海量服务
在2014年4月11日的腾讯分享日活动上,腾讯OMG移动媒体产品部助总郑坚分享了有关腾讯新闻海量服务的一些技术技术原则。本文根据这次分享内容整理而成。 腾讯很多海量服务的意识和规则都是从QQ演化出来的,即使从移动互联网的角度来看,当时的很多规则也很贴切。我下面的分享主要从两点展开: 1. 跟产品、运营的合作的一些技术原则 2. 移动端海量服务的特点 我负责的移动新闻客户端,在两年半前接手的时候还是比较小的,到现在安装量早已过亿,日活跃用户量在千万级,很多用户从微信和手机QQ进来。从比较小的规模成长到现在这
腾讯大讲堂
2018/04/08
1.3K0
探索中的VR+新闻,门槛高但是前途光明
今早神舟十一号载着我国两名宇航员成功升天,当小编在观看央视直播报道的时候,看到土豪的央视爸爸在演播室用起了酷炫的VR和AR技术。其中在介绍到神舟十一号的时候,央视的演播室运用AR技术,让模拟的神舟飞船从屏幕里穿出来,然后主持人对着屏幕进行分析。当介绍到飞行器时,主持人“穿越”到它的内部,用虚拟技术给观众更加直观的内部细节展示。 类似央视这样,将VR技术和新闻报道活动结合在一起,创新传统的新闻报道模式,就属于“VR+新闻”一种。而VR+新闻的定义,套用新闻界学者的一句话,它是“一种使观众能够对新闻中的故事或者
镁客网
2018/05/29
4670
如何用 AI 来鉴别假新闻
18年10月4日,麻省理工学院计算机科学与人工智能实验室(CSAIL)在其官网发布了一则新闻,宣称该实验室与卡塔尔计算研究所(Qatar Computing Research Institute)的研究人员合作,已经研究出一种可以鉴别信息来源准确性和个人政治偏见的AI系统,该研究成果将于本月底在比利时布鲁塞尔召开的2018自然语言处理经验方法会议(EMNLP)上正式公布。
AI算法修炼营
2021/06/17
8750

相似问题

PowerShell -新闻部感知表格

15

新闻部感知屏幕截图

15

SetWindowPos()跨进程新闻部感知

16

新闻部感知应用程序中的SizeGripStyle

18

如何解决新闻部的高问题?

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文