2016-01-18 5 views
1

Я пытаюсь использовать Qt 5.5.1 QGraphicsBlurEffect в моем проекте, но не может заставить его работать на Mac:QGraphicsBlurEffect изменяет текст, но не Widget сама

screenshot on mac

Я пытался сделать изменение с помощью PerformanceHint, QualityHint или AnimationHint, но не удалось. Использование QGraphicsColorizeEffect я была такая же проблема, в то время как QGraphicsOpacityEffect и QGraphicsDropShadowEffect, а также все, что на Linux работает прекрасно:

enter image description here

Как я могу изменить свой файл проекта или код, чтобы сделать этот вопрос графика уйти? Возможно ли это?

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(); 
} 
+0

Вы используете дисплей HDPI/Retina? Похоже, шрифт точно масштабируется по коэффициенту 2? Моя * догадка * будет заключаться в том, что ошибка, вызванная сетчаткой (devicePixelRatio = 2), не обрабатывается правильно. –

+0

@FrankOsterfeld думаю. Но то же самое происходит с изображениями в 'QLabel'. У вас есть идея, как обойти это? – tynn

ответ

1

У меня была аналогичная проблема с QGraphicsOpacityEffect: размытый текст и значки, когда оно должно быть четким резким. Похоже на ошибку в Qt. Мое решение состояло в том, чтобы написать собственный небольшой класс, содержащий все, что мне нужно, с надлежащим рендерингом. Ну, вы можете попробовать исправить Qt ... удачи при чтении исходного кода графических эффектов. Это довольно сложно со всеми его dpr и преобразовать матрицу и отображать дочерние виджеты.

+0

Я действительно читал это уже. Не могли бы вы поделиться своим кодом здесь? Может быть, упрощенная версия, которая может воспроизвести исправление. – tynn

+0

С непрозрачностью это было легко. Потому что 'QPainter' имеет функцию' setOpacity() '. Поэтому я мог бы переопределить 'QWidget :: paintEvent()' и создать свою собственную графику рисования, используя маляр с соответствующей непрозрачностью. Вы можете изменить непрозрачность с помощью некоторого настраиваемого свойства и вызвать 'QWidget :: update()'. Результат довольно приятен в анимации. Я боюсь, что эффект размытия не будет таким простым решением. –