QGraphicsBlurEffect 调整文本大小但不调整小部件本身
Posted
技术标签:
【中文标题】QGraphicsBlurEffect 调整文本大小但不调整小部件本身【英文标题】:QGraphicsBlurEffect resizes Text but not Widget itself 【发布时间】:2016-01-18 20:14:53 【问题描述】:我正在尝试在我的项目中使用 Qt 5.5.1 QGraphicsBlurEffect
,但无法在 Mac 上运行:
我尝试使用PerformanceHint
、QualityHint
或AnimationHint
进行更改,但没有成功。使用QGraphicsColorizeEffect
我遇到了同样的问题,而QGraphicsOpacityEffect
和QGraphicsDropShadowEffect
以及Linux 上的一切都运行良好:
如何更改我的项目文件或代码以消除此图形问题?有可能吗?
TEMPLATE = app
TARGET = main
QT += widgets
SOURCES += main.cpp
#include <QtWidgets>
int main(int argc, char **argv)
QApplication app(argc, argv);
QMainWindow window;
QTextEdit *text = new QTextEdit;
text->setReadOnly(true);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(text);
QWidget *widget = new QWidget;
widget->setLayout(layout);
QGraphicsBlurEffect effect;
effect.setBlurRadius(3);
QLabel *test = new QLabel("TEST");
test->setGraphicsEffect(&effect);
(new QHBoxLayout(text))->addWidget(test, 0, Qt::AlignCenter);
window.setCentralWidget(widget);
window.show();
return app.exec();
【问题讨论】:
您使用的是 HDPI/Retina 显示器吗?看起来字体完全按因子 2 缩放?我的猜测可能是由于没有正确处理视网膜 (devicePixelRatio=2) 引起的错误。 @FrankOsterfeld 我想是的。但QLabel
中的图像也是如此。你知道如何解决这个问题吗?
【参考方案1】:
QGraphicsOpacityEffect
也有类似的问题:文本和图标模糊,但必须清晰锐利。似乎是Qt中的一个错误。我的解决方案是编写我自己的小类,其中包含我需要的所有内容并进行适当的渲染。
好吧,您可以尝试修复 Qt... 祝您阅读图形效果的源代码好运。它的所有 dpr 和变换矩阵以及渲染子小部件都非常复杂。
【讨论】:
我确实已经读过了。你介意在这里分享你的代码吗?也许是可以重现修复的简化版本。 不透明度很容易。因为QPainter
有一个setOpacity()
函数。所以我可以覆盖QWidget::paintEvent()
并使用具有适当不透明度的画家制作我自己的绘画逻辑。您可以通过一些自定义属性更改不透明度并调用QWidget::update()
。结果在动画中非常好。恐怕模糊效果不会那么容易解决。以上是关于QGraphicsBlurEffect 调整文本大小但不调整小部件本身的主要内容,如果未能解决你的问题,请参考以下文章