2012-01-17 20 views
5

QML kullanarak bulanıklık efekti elde etmek istiyorum. "effect: Blur" (Example) ile ilgili referansları buldum ama Qt 4.8'de bu işe yaramıyor. Bildiğim kadarıyla bu C++ kodu ile uygulanmaktadır. Ama nasıl?Qml ve bulanık görüntü

cevap

13

Qt 4.8, QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect ve QGraphicsOpacityEffect ile birlikte gelir. Orijinal olarak, bunların tümü varsayılan olarak QML'de kullanılabilir, ancak geliştirme sırasında bir kerede (QtQuick'in ilk yayınlanmasından önce) performans nedenleriyle hariç tutulmuştur. böylece bir gibi kullanabilirsiniz QML bu sınıflar mevcut

qmlRegisterType<QGraphicsBlurEffect>("Effects",1,0,"Blur"); 
qmlRegisterType<QGraphicsColorizeEffect>("Effects",1,0,"Colorize"); 
qmlRegisterType<QGraphicsDropShadowEffect>("Effects",1,0,"DropShadow"); 
qmlRegisterType<QGraphicsOpacityEffect>("Effects",1,0,"OpacityEffect"); 

Bu olun: onları tekrar çalışmasını sağlamak için, bir main işlevi örneğin onun başvurunun C++ bölümünde aşağıdaki kod satırlarını, içermelidir :

import QtQuick 1.1 
import Effects 1.0 

Item { 
    // [...] 
    effect: Blur { 
     blurRadius: 10.0 
    } 
} 

Bu, ancak birçok durumda sonuç performans gerçekten kabul edilemez. O zaman, ShaderEffectItem yardımı ile bulanıklaştırma yapmayı denemelisiniz. Bu şekilde, GLSL gölgelendirici programlarıyla grafik efektleri gerçekleştirilebilir, bu da eski QGraphicsEffect temelli yaklaşımdan daha hızlı olan GPU oluşturma ile sonuçlanır.

1

Ne hakkında konuştuğunuzu bilmiyorum, ancak: Qt, Shader Effects adlı bir örnekle gönderilir. Adından da anlaşılacağı gibi, her türlü harika etkiyi elde etmek için QML içinde bildirilen GPU shader'larını kullanır. Tüm görsel QML öğelerinin sahip olduğu özniteliği, QGraphicsEffect alt sınıfları olan tüm etkileri kabul eder.