2015-05-04 34 views
2

顯示我可以得到一個邊界,以顯示我的QLabels就好:QLabel邊界不會與像素圖

enter image description here

但是當我嘗試以顯示他們一個像素圖,邊界消失:

enter image description here

我在QLabel子類的構造設置框架屬性

ObjectSlot::ObjectSlot(int index) { 
    setIndex(index); 

    setFrameShape(QFrame::StyledPanel); 
    setFrameShadow(QFrame::Raised); 
    setLineWidth(3); 
    setMidLineWidth(3); 

    setAlignment(Qt::AlignCenter); 
    return; 
} 

的像素圖設置在paintEvent

void ObjectSlot::paintEvent(QPaintEvent* event) { 
    QPixmap* image = new QPixmap("://images/Box.png"); 
    setPixmap(image->scaled(width(),height(),Qt::KeepAspectRatio)); 
    QLabel::paintEvent(event); 
} 

爲什麼邊框消失?爲什麼生活如此殘酷?

+0

邊界不會消失,只是因爲像素圖取得了幀的大小而看不到它。 –

+0

@NanaOsaberima對於alpha通道圖像,也沒有邊界,所以可能不是問題。 – Chernobyl

+0

我嘗試使用較小的像素圖,並有相同的問題。 – knockonwood

回答

2

因爲督表示:

設定像素映射清除所有以前的內容。好友快捷方式(如果有 任何一項)被禁用。

如此看來,這是不可能的,但我發現了一個解決方案,你不應該setPixmap(),你只需要drawPixmap()當所有正確的標籤被漆成:

void ObjectSlot::paintEvent(QPaintEvent *e) 
{ 
    QLabel::paintEvent(e); 
    //label painted 
    QPainter p(this); 
    QPixmap image("G:/2/qt.png"); 
    p.drawPixmap(QPoint(1,1),image.scaled(100,100,Qt::KeepAspectRatio)); 
} 

結果:

enter image description here

不是最好的解決方案,因爲你應該適應你的目的,但目前總比沒有好。

+0

這很好,謝謝!不得不指定像素雖然有點凌亂:) – knockonwood