2016-07-06 1 views
2

У меня есть центрированный прямоугольник с тенью за ним и некоторый текст внутри него.Текст становится размытым при изменении размера окна

import QtQuick 2.5 
import QtQuick.Window 2.2 
import QtGraphicalEffects 1.0 

Window { 

    visible: true 
    width: 800; height: 640 

    Rectangle{ 

     id: centerRect 
     width: parent.width * 0.7; height: parent.height * 0.7 

     anchors{ 
      horizontalCenter: parent.horizontalCenter 
      verticalCenter: parent.verticalCenter 
     } 

     radius: 7 
     border.color: "#C0C0C0" 

     Text{ 

      text: "Hello World!" 
      font.pixelSize: 0.07 * parent.height 

      anchors{ 

       horizontalCenter: parent.horizontalCenter 
       verticalCenter: parent.verticalCenter 
      } 
     } 
    } 

    DropShadow 
    { 
     anchors.fill: centerRect 
     horizontalOffset: 1; verticalOffset: 1 
     radius: 5 
     samples: 11 
     color: "#CDCDCD" 
     source: centerRect 
    } 
} 

При изменении размера окна текст становится слегка размытым или не в фокусе. Я подумал, что это может быть проблема с тем, как я масштабирую размер пикселя шрифта до высоты прямоугольника, но проблема остается неизменной со статическими значениями. Если я удалю эффект тени, видимость текста прекрасна при изменении размера окна.

Как сохранить хорошую видимость текста при использовании тени и изменения размера окна? Я использую Qt 5.5.1 на OpenSUSE Leap 42.1 (Plasma 5.5.5).

+0

Это может быть проблемой с вашим менеджером окон, который делает изменение размеров окна. Какие эффекты вы установили в KWin? Изменяется ли влияние на вашу проблему? (Shift-Alt-F12 для включения/выключения компоновки, настроек KWin и т. Д.) – user23573

+0

@BogdanWilli Я сделал комбинации изменения рендеринга и отключения композитора в плазме, но результат тот же. – DanielJG

ответ

1

Решение 1: Используйте только DropShadow только для фона прямоугольника и нарисуйте текст поверх этого.

Решение 2: Используйте целую ширину и высоту для centerRect. Графический эффект сначала отображает centerRect в текстуру. Если ширина или высота источника не являются целыми, размер текстуры не будет соответствовать размеру исходного элемента. При рисовании текстуры координаты текстуры не будут точно ударять по пиксельным позициям, и необходима некоторая интерполяция.

+0

Закончено с использованием решения 1. – DanielJG

1

Для меня самым простым является перемещение текста из центраRect, поэтому он не будет его дочерним объектом, поэтому не будет уменьшаться побочным эффектом DropShadow. например:

движения текста снаружи и изменить его кондиционирование, как показано ниже:

Text{ 

    text: "Hello World!" 
    font.pixelSize: 0.07 * centerRect.height 
    anchors.centerIn: centerRect 

}