Я реализовал пользовательские курсоры 32x32 с растровыми изображениями, используя следующий подход (в Qt 6.1.1):
this->setCursor(QCursor(QBitmap(":/Cursors/arrow_up.bmp"), QBitmap(":/Cursors/arrow_up_mask.bmp"), 3, 0));
Курсоры работают должным образом, если для параметра отображения Windows для размера приложений и текста установлено значение 100%. Однако, если размер приложений и текстовой настройки увеличен, Qt соответствующим образом масштабирует пользовательские курсоры, и они становятся пикселизированными (например, если выбрано 150%, Qt увеличивает размер пользовательских курсоров на 50%).
Есть ли способ запретить Qt изменять размер пользовательских курсоров? В качестве альтернативы, есть ли способ узнать, что пользователь выбрал в Windows для размера приложений и текста, чтобы я мог предоставить курсоры с правильным разрешением?
Спасибо, Париса. К сожалению, Qt по-прежнему увеличивает курсор при использовании этого подхода (хотя пикселизация немного меньше, чем при непосредственном использовании растровых изображений).
Добро пожаловать! Попробуйте использовать файл
SVG
значка курсора вместо файлаbmp
.Вместо этого я попробовал это с файлом svg, и он все еще выглядит немного размытым, когда Qt масштабирует его. Похоже, что Qt устанавливает размер 32x32, а затем увеличивает его по сравнению с обычными значками, где вы можете предоставить изображение с более высоким разрешением, и Qt уменьшает его, чтобы он соответствовал указанному размеру значка.
Итак, я думаю, что лучше иметь несколько иконок. В разном размере и разрешении и установите какое-то условие, что если изменить значки разрешения экрана, я думаю, что в ОС, таких как Windows или Linux, это произойдет.
Я согласен. Это кажется лучшим решением. Однако похоже, что Qt предполагает, что размер, который вы предоставляете, основан на настройке размера текста 100% в Windows (т.е. pixelDeviceRatio = 1), а затем независимо масштабирует курсор. Таким образом, даже если я предоставлю курсор 64x64 для pixelDeviceRatio = 2, Qt возьмет его и снова увеличит. Любые идеи о том, как остановить Qt от применения коэффициента масштабирования?
Ну, это произошло в режиме Released? Я спросил, потому что иногда бывает по-другому. между режимом отладки и режимом выпуска.
@karl_simmons Я отредактировал свой ответ, надеюсь, это поможет вам. Поместите
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
в файл main.cppСпасибо. Я пробовал это, но в Qt6 я получаю предупреждение о том, что масштабирование с высоким разрешением включено по умолчанию. Есть ли другой способ установить QT_AUTO_SCREEN_SCALE_FACTOR = 1?
Я не использую Qt 6, потому что он нестабилен. Но я тестирую этот флаг в Qt5.14.