Псевдоэлемент :focus-within
позволяет выбрать родителя, если у потомка есть фокус.
Элемент может быть сфокусирован, если он имеет атрибут tabindex
.
Поддержка браузера для фокуса внутри
Пример
.click {
cursor: pointer;
}
.color:focus-within .change {
color: red;
}
.color:focus-within p {
outline: 0;
}
I will change color
Click me
Приложения, использующие фиксированные координаты и размеры, будут выглядеть небольшими по высоким разрешениям DPI. Хотя даже при использовании макетов существуют некоторые проблемы, касающиеся размеров и полей элементов и шрифтов. К счастью, поддержка high-DPI-дисплеев с Qt 5.4 связана с большим количеством исправлений с высоким уровнем DPI .
Приложение в Windows может принимать один из следующих уровней " DPI Awareness "(из документации Qt):
blockquote>
- 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):
blockquote><application> -platform windows:dpiawareness=0,1,2
Здесь вы можете прочитать дополнительную информацию здесь .
Как правило, чтобы иметь хороший интерфейс на дисплеях с высоким разрешением DPI, рассмотрите следующее:
- Используйте последнюю версию Qt
- Используйте макеты и избегайте фиксированных размеров (если вы сами не вычисляете коэффициенты масштабирования)
- Внесите соответствующие параметры, связанные с DPI, в зависимости от ваших потребностей приложения, например, установите атрибут
Qt::AA_UseHighDpiPixmaps
, если вы работаете сQPainter
и pixmaps, или вычислить коэффициент масштабирования для настройки определенных размеров элементов в особых ситуациях.
Вот самый быстрый способ решить проблему в Windows.
Рядом с исполняемым файлом создайте файл qt.conf (если он еще не существует) и добавьте следующее:
[Platforms]
WindowsArguments = dpiawareness=0
При увеличении масштаба окно будет размыто. Большим преимуществом этого решения является то, что Windows делает масштабирование, а не Qt. Поэтому наличие артефактов минимизировано. Кроме того, это может относиться к уже распределенному приложению, так как оно не требует перестройки.
Конечно, это не самый приятный результат, но самый быстрый способ избавить вас от неприятностей в краткосрочной перспективе, позволяя вы разрабатываете «настоящую» версию с поддержкой DPI без давления.
Я использую Qt 4.8. Во-первых, вы должны использовать макеты. Моя цель состояла в том, чтобы запретить пользователям изменять диалоги, формы и т. Д.
Я достиг правильных результатов отображения на разных DPI, поместив этот код в конструктор диалоговых окон:
adjustSize();
setFixedSize(size());
Первая строка adjustSize()
настроить размер диалогового окна для соответствия его контенту. Вторая строка setFixedSize(size())
фиксирует размер диалогового окна после настройки его размера на контент и не позволяет пользователям изменять его размер. Вы не должны устанавливать политики размера.
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 и результаты масштабируются должным образом, как ожидалось.