Изменение размера окна PyQt4 на разных компьютерах [дубликат]

Псевдоэлемент :focus-within позволяет выбрать родителя, если у потомка есть фокус.

Элемент может быть сфокусирован, если он имеет атрибут tabindex.

Поддержка браузера для фокуса внутри

Tabindex

Пример

.click {
  cursor: pointer;
}

.color:focus-within .change {
  color: red;
}

.color:focus-within p {
  outline: 0;
}

I will change color

Click me

16
задан Trilarion 3 November 2016 в 15:47
поделиться

4 ответа

Приложения, использующие фиксированные координаты и размеры, будут выглядеть небольшими по высоким разрешениям DPI. Хотя даже при использовании макетов существуют некоторые проблемы, касающиеся размеров и полей элементов и шрифтов. К счастью, поддержка high-DPI-дисплеев с Qt 5.4 связана с большим количеством исправлений с высоким уровнем DPI .

Приложение в Windows может принимать один из следующих уровней " DPI Awareness "(из документации Qt):

  • DPI Unaware: этот уровень был введен в Windows-Vista. Windows будет притворяться приложением, что оно работает на стандартном дисплее 96 DPI 1920x1080 и соответствующим образом масштабирует приложение. Он предназначен для размещения старых приложений, предназначенных для дисплеев с низким разрешением DPI. Некоторые артефакты могут возникать в результате такого масштабирования.
  • System-DPI Aware: этот уровень был введен в Windows-Vista. Он отличается от Per-Monitor DPI Aware только при подключении нескольких мониторов. Windows рассчитает масштабирование, подходящее для всех подключенных мониторов.
  • Per-Monitor DPI Aware: этот уровень введен в Windows 8.1. Windows не выполняет никакого масштабирования.

Также он утверждает, что:

Приложения Qt по умолчанию являются Per-Monitor DPI Aware on Windows 8.1 или System-DPI Aware в старых версиях Windows. Начиная с Qt 5.4, уровень может быть указан путем передачи параметра плагину платформы (см. Использование qt.conf):

<application> -platform windows:dpiawareness=0,1,2

Здесь вы можете прочитать дополнительную информацию здесь .

Как правило, чтобы иметь хороший интерфейс на дисплеях с высоким разрешением DPI, рассмотрите следующее:

  • Используйте последнюю версию Qt
  • Используйте макеты и избегайте фиксированных размеров (если вы сами не вычисляете коэффициенты масштабирования)
  • Внесите соответствующие параметры, связанные с DPI, в зависимости от ваших потребностей приложения, например, установите атрибут Qt::AA_UseHighDpiPixmaps, если вы работаете с QPainter и pixmaps, или вычислить коэффициент масштабирования для настройки определенных размеров элементов в особых ситуациях.
7
ответ дан Coye1023 19 August 2018 в 14:33
поделиться

Вот самый быстрый способ решить проблему в Windows.

Рядом с исполняемым файлом создайте файл qt.conf (если он еще не существует) и добавьте следующее:

[Platforms]
WindowsArguments = dpiawareness=0

При увеличении масштаба окно будет размыто. Большим преимуществом этого решения является то, что Windows делает масштабирование, а не Qt. Поэтому наличие артефактов минимизировано. Кроме того, это может относиться к уже распределенному приложению, так как оно не требует перестройки.

Конечно, это не самый приятный результат, но самый быстрый способ избавить вас от неприятностей в краткосрочной перспективе, позволяя вы разрабатываете «настоящую» версию с поддержкой DPI без давления.

2
ответ дан DavGin 19 August 2018 в 14:33
поделиться

Я использую Qt 4.8. Во-первых, вы должны использовать макеты. Моя цель состояла в том, чтобы запретить пользователям изменять диалоги, формы и т. Д.

Я достиг правильных результатов отображения на разных DPI, поместив этот код в конструктор диалоговых окон:

adjustSize();
setFixedSize(size());

Первая строка adjustSize() настроить размер диалогового окна для соответствия его контенту. Вторая строка setFixedSize(size()) фиксирует размер диалогового окна после настройки его размера на контент и не позволяет пользователям изменять его размер. Вы не должны устанавливать политики размера.

0
ответ дан maly216 19 August 2018 в 14:33
поделиться

Qt полностью поддерживает высокие мониторы DPI от Qt 5.6 вперед, через атрибут или переменную среды (кроме OS X, где поддержка является родной). Для метода атрибута используйте:

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support

    QApplication app(argc, argv);   
    return app.exec();
}

или задайте переменную системной среды:

QT_AUTO_SCREEN_SCALE_FACTOR=1

Я тестировал оба метода в Windows 10 с помощью монитора с надписью с высоким уровнем DPI и результаты масштабируются должным образом, как ожидалось.

6
ответ дан Nicolas Holthaus 19 August 2018 в 14:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: