Nano Hash - криптовалюты, майнинг, программирование

Масштабирование QML не работает с нецелочисленными коэффициентами масштабирования.

Я пишу приложение с использованием QML. У меня возникают проблемы, когда я масштабирую свой графический интерфейс с помощью нецелочисленных коэффициентов. Согласно документации, Qt::AA_EnableHighDpiScaling должен включать независимые от устройства пиксели, поэтому автоматически принимает позаботьтесь о большей части масштабирования:

Атрибут приложения Qt::AA_EnableHighDpiScaling, представленный в Qt 5.6, включает автоматическое масштабирование на основе плотности пикселей монитора.

В сообщении в блоге о 5.6, они допускают, что могут быть проблемы:

Вопрос. Поддерживаются ли нецелые коэффициенты масштабирования?

A: Qt использует qreal в API и позволяет устанавливать нецелые коэффициенты масштабирования через QT_SCALE_FACTOR. Однако Qt не гарантирует, что в этом случае графика и стили не будут глючить. Стили могут сломаться первыми: стиль слияния, как правило, является наиболее масштабируемым. Плагины платформы Qt округляют сообщаемые коэффициенты масштабирования до ближайшего целого числа.

и в комментарии:

В: Означает ли это, что он по-прежнему работает только с целыми числами? Что происходит с Windows с масштабом 150% DPI?

О: Да, если только вы не установите/не исправите его вручную с помощью QT_SCALE_FACTOR. 150% должны затем перейти к 2x.

Так что для меня это приводит к комически большому графическому интерфейсу при масштабировании до 150%. Однако текст масштабируется правильно, что приводит к странным артефактам, таким как большая кнопка с мелким текстом.

Я неправильно понимаю, как это работает, или это просто пока невозможно?


  • У меня тоже были некоторые проблемы с этим. Итак, теперь я масштабирую приложение вручную, передавая аргумент командной строки и используя Qt.application.arguments. 16.05.2017
  • Кажется, есть некоторое движение к более полному решению: bugreports.qt.io/browse/QTBUG- 53022 19.05.2017

Ответы:


1

Как упоминалось в комментарии, меня не удовлетворил QT_SCALE_FACTOR, поэтому я решил сделать его самостоятельно и создал ScaleableWindow вот так:

import QtQuick 2.0
import QtQuick.Controls 2.0

ApplicationWindow {
    id: root
    property real scale: 1
    property real unscaledWidth: 100
    property real unscaledHeight: 100

    Component.onCompleted: {
        var i = Qt.application.arguments.indexOf('--scale')
        if (i > -1 && Qt.application.arguments[i+1]) scale = parseFloat(Qt.application.arguments[i+1])
    }

    width: unscaledWidth * scale
    height: unscaledHeight * scale

    property alias scaledContentItem: scaledContent
    default property alias scaledContent: scaledContent.data

    Item {
        id: scaledContent
        width: root.unscaledWidth
        height: root.unscaledHeight
        scale: root.scale
        anchors.centerIn: parent
    }
}

Теперь вы можете указать масштабный коэффициент, передав, например. аргумент командной строки --scale 0.4

Вы также можете попробовать использовать Screen.pixelDensity< /a> для вычисления коэффициента масштабирования, но это зависит от того, правильно ли дисплей опубликует свою плотность пикселей, что мне довольно часто не удавалось.

Вы также можете использовать это для создания окна, которое автоматически масштабирует содержимое при изменении размера окна.


Так что если вопрос Возможно ли это с переменной среды - я так не думаю. Если возникает вопрос Возможно ли масштабировать окно и его содержимое на основе какого-либо внешнего ввода — вот решение.

16.05.2017
  • Это выглядит как интересное решение, я немного удивлен, что это должно быть так просто. Вы также пробовали Screen.devicePixelRatio? Вы сохранили Qt::AA_EnableHighDpiScaling? 16.05.2017
  • Нет, у меня больше не установлены переменные среды. 16.05.2017
  • Screen.devicePixelRatio имеет замечательную документацию: 1.0 на обычных экранах и 2.0 на дисплеях Apple Retina — серьезно? Что это на MS Surface? Что такое нормальный экран? Я не осмелился использовать это :D 16.05.2017
  • У вас есть решение для случая, когда вы хотите масштабировать пользовательский интерфейс на основе настройки DPI монитора? В настоящее время я хотел бы включить высокое разрешение для всех целочисленных коэффициентов масштабирования и отключить его для всего остального, но я не вижу способа сделать это. 18.05.2017
  • (обновление 2): я был заинтригован и отправился в путешествие: Screen.devicePixelRatio возвращает d->platformScreen->devicePixelRatio() * QHighDpiScaling::factor(this); где devicePixelRatio() жестко запрограммирован как 1.0 в Windows. QHighDpiScaling — интересный класс с большим количеством документации. 28.05.2017
  • Этот материал определенно должен быть одноэлементным, а не динамическим свойством области видимости, учитывая, что это то, что будет использоваться повсеместно, и можно сократить много накладных расходов, имея возможность обращаться к свойствам напрямую, а не искать их сверху вниз. дерево объектов. 29.08.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..