如何在应用程序中设置图标大小,以便在用户使用屏幕缩放比例时仍可以缩放图标?
在我的应用程序中,我在MainWindow中有一个QToolBar,它似乎使用24x24的Icon大小。我有一些QToolButton,默认情况下它的图标大小为20x20,因此我必须手动将其设置为24x24才能使所有具有相同大小的图标都带有setIconSize(QSize(24, 24));
。无需缩放即可正常工作:
当桌面启用某些缩放功能时,固定大小的图标不会缩放,看起来像这样:
我在QLabels中显示图标的另一个用例,在将QIcon转换为QPixmap时必须指定大小,这也无法缩放mImageLabel->setPixmap(icon().pixmap(QSize(24, 24)));
还有什么更好的理由,然后再乘以比例因子?如何获得比例因子?
似乎设置为固定大小会阻止从Qt端进行缩放,因此我们需要手动调整大小。就我而言,似乎我可以通过将logicalDpi除以96得到正确的比例因子,这是比例因子为1的DPI。我不确定这是否是所有用例的最佳解决方案(是否经过测试)例如MacOS),但修复了我的用例。
我写了一个简单的类,将所有固定大小缩放到正确的值:
#include <QApplication>
#include <QDesktopWidget>
QSize ScaledSizeProvider::getScaledSize(const QSize &size)
{
return {static_cast<int>(size.width() * getXScaleFactor()), static_cast<int>(size.height() * getYScaleFactor())};
}
qreal ScaledSizeProvider::getXScaleFactor()
{
auto desktopWidget = QApplication::desktop();
return desktopWidget->logicalDpiX() / getReferenceDpiValue();
}
qreal ScaledSizeProvider::getYScaleFactor()
{
auto desktopWidget = QApplication::desktop();
return desktopWidget->logicalDpiY() / getReferenceDpiValue();
}
qreal ScaledSizeProvider::getReferenceDpiValue()
{
return 96.0;
}
和简单的方法使用:
ScaledSizeProvider::getScaledSize(QSize(24, 24))