2015-04-01 53 views
0

我正在使用Qt 4.6創建金色斑塊的網格。我已經使用QLabel作爲我的小部件,並將其父母設置爲QPixmap,其中包含斑塊的.jpg圖像。小部件然後將屏幕向上滾動到視線之外。但是,現在我希望斑塊在移動時發光。我認爲QGraphicsEffect會有一個功能可以做到這一點 - 就像其陰影改變光源位置的dropShadowEffect一樣。以類似的方式,我正在尋找一種方式,即每個飾板的光澤都會在小部件移動時從光源反射出來。Qt獲取QWidget以反射光

所以,舉個例子,這裏是一個獎盃閃閃發光的金子Gold Trophy2nd Gold Trophy(看第二個獎盃)。我希望能夠將相同的功能添加到我的牌匾上。任何幫助將大大地appreaciated

+1

你可以畫一個你期望達到什麼樣的圖像嗎? – Googie 2015-04-01 19:57:38

+0

按要求添加 – user3507499 2015-04-01 21:00:58

回答

2

這真的不是一個反映,這本身將是非常複雜的實現。

這是一個笨拙的麪包店,基本上你有一個從透明到白色到透明的動畫線性漸變,當它穿過它時應該應用到的對象的alpha值將其遮住。

如果你正在尋找一種方式來做到這一點在Qt中,它絕對不是QtWdigets,它將是非常低效。這樣做的正確的工具是QML - 這是多麼簡單:

import QtQuick 2.4 
import QtQuick.Window 2.2 
import QtQuick.Controls 1.2 
import QtGraphicalEffects 1.0 

ApplicationWindow { 
    id: main 
    width: 200 
    height: 200 
    visible: true 
    color: "black" 

    Grid { 
     x: 15 
     y: 15 
     id: grid 
     rows: 3 
     columns: 3 
     spacing: 10 

     Repeater { 
      model: 9 
      Rectangle { 
       radius: 10 
       width: 50 
       height: 50 
       color: "gold" 
       border.color: "orange" 
       border.width: 5 
      } 
     } 
    } 

    LinearGradient { 
     id: effect 
     anchors.fill: grid 
     source: grid 
     rotation: -90 
     property real p : pos.mouseX/pos.width 
     gradient: Gradient { 
      GradientStop { position: effect.p - 0.05; color: "#00FFFFFF"} 
      GradientStop { position: effect.p; color: "#FFFFFFFF"} 
      GradientStop { position: effect.p + 0.05; color: "#00FFFFFF"} 
     } 
    } 

    MouseArea { 
     id: pos 
     anchors.fill: grid 
     hoverEnabled: true 
    } 
} 

而結果:

enter image description here

在這個例子中的光會用鼠標位置移動。

+0

感謝您的回覆。問題是 - 我只有Qt 4.6。我無法在其中實現qml。你是否還有任何關於在qwidget上進行照明工作的建議。我知道它很困難 - 但即使是一個寬泛的輪廓也可能奏效。從你寫的內容來看,它似乎與線性漸變有關? – user3507499 2015-04-02 03:22:33

+0

「我只有Qt 4.6」 - 好吧,爲什麼你還沒有更新的版本,畢竟......你知道,它是免費的。 「大綱」是答案的第二段,它也用於QML示例,它只是QML爲您完成大部分工作,使用QtWidgets您必須手動繪製所有內容。 – dtech 2015-04-02 12:49:59

+0

太好了。謝謝 – user3507499 2015-04-03 12:35:52