小编maj*_*ajk的帖子

使用QtStyleSheet的高DPI图像

我有一个使用Qt styleSheet的Qt Widgets应用程序来获得应用程序的外观.我们希望添加对高DPI显示器的支持,因为这些应用看起来非常小.因此,第一步是:

QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
Run Code Online (Sandbox Code Playgroud)

这可以完成大部分工作,应用程序窗口足够大.唯一剩下的问题是样式表中使用的图像的分辨率.

说我们有:

QCheckBox::indicator::unchecked {
    image: url(:/res/checkbox_off.png);
}
MainWindow QFrame {
    background-image: url(:/res/background.png);
}
Run Code Online (Sandbox Code Playgroud)

当使用高DPI缩放时,这些图像会相应地升级,这是一个问题.对于高DPI,我宁愿使用更高分辨率的图像,使它们看起来尽可能清晰.

正如所料,简单地以更高分辨率提供图像的简单方法不起作用 - 它使图像和控制的两倍大(在低和高DPI屏幕上).

关于QImageReader的Qt文档说明了这一点

高分辨率版本在基本名称上标有后缀@ 2x.读取的图像将其设备像素比率设置为值2.

但是,我提供了两倍分辨率的这些资源,将它们添加到qrc文件中,但在pixel_ratio为3的设备上显示的图像仍然相同.

是否还需要其他步骤才能使自动图像加载与样式表一起使用?

qt qwidget hdpi qtstylesheets

6
推荐指数
0
解决办法
910
查看次数

如何创建创建自定义 make 目标的 qmake 函数?

我知道我们必须QMAKE_EXTRA_TARGETS创建新的 makefile 目标,使用如下(见http://blog.qt.io/blog/2008/04/16/the-power-of-qmake/):

conv.target=convert
conv.input=file.in
conv.output=file.out
conv.commands=convert.sh file.in file.out
QMAKE_EXTRA_TARGETS+=conv
Run Code Online (Sandbox Code Playgroud)

在我的情况下,convert.sh用于多个文件和目标。我想创建一个带有参数(target_name、input_file、output_file)的方法,它为我创建任务,这样我就不必重复以上几行了。

qmake 的文档相当缺乏,或者我没有找到正确的来源,但据我所知,qmake 中有两种类型的函数:replace 和 test ( http://doc.qt.io/qt-5/ qmake-language.html#replace-functions),我们可以使用defineReplace和创建自定义的defineTest

我试过了:

defineTest(createConvertTask) {
    custom.target = $$1
    custom.input = $$2
    custom.output = $$3
    custom.commands = convert.sh $$2 > $$3
    QMAKE_EXTRA_TARGETS += custom
}
Run Code Online (Sandbox Code Playgroud)

但这并没有真正起作用,因为在createConvertTask多次调用之后,QMAKE_EXTRA_TARGETS只会包含 string 的多个副本custom

然而,这

defineTest(createConvertTask) {
    $$1.target = $$1
    $$1.input = $$2
    $$1.output = $$3
    $$1.commands = convert.sh $$2 > $$3
    QMAKE_EXTRA_TARGETS …
Run Code Online (Sandbox Code Playgroud)

c++ qt qmake makefile

5
推荐指数
1
解决办法
2224
查看次数

标签 统计

qt ×2

c++ ×1

hdpi ×1

makefile ×1

qmake ×1

qtstylesheets ×1

qwidget ×1