2010-11-25 21 views
8

Diğer bazı parçacıklar için üst öğe olarak davranacak ve bunları sipariş edecek bir qt parçacığı oluşturmanız gerekir.Tamamen şeffaf arka plana sahip bir qt parçacığı

Şimdi, soru arka planının tamamen şeffaf olmasını nasıl sağlayabilirim?

struct Imp 
{ 
    Imp(QWidget *parent) : thisWidget(new QWidget(parent)) 
    { 
    thisWidget->setAttribute(Qt::WA_TranslucentBackground, true); 
    } 

    QWidget *thisWidget; 
}; 

Sana özellik ayarlamak gerektiğini düşünüyor musunuz, yoksa onsuz ince işe yarayacak:

böyle yapmak düşündü? tamamen sizin sorunu çözmeyi

+0

Eğer gerçekten bir _transparent_ arka plan gerekir, aksi halde _NO_ altyapıya sahip yeterlidir? Bu gerçek bir farktır: şeffaf bir arka plan ile OS, _underlying_ penceresinin pikselleri boyadığını söyleyecektir. Bir arka plan olmadan, OS sadece çocukların tüm pencereyi boyamasını bekler. – MSalters

+0

@MSalters Bu pencere öğesi bir pencerede yer alıyor ve yalnızca bu widget'ların alt öğeleri görünmelidir. Bu widget'ın arkasında ne varsa (bir çocuk widget'ının kapsamadığı durumlarda) görülmelidir. –

+0

Bu soruyu anladığımdan emin değilim ... Qt4'te varsayılan olarak, bir QWidget kendi geçmişi için hiçbir şey çizmeyecek ve sadece onun çocukları çizilecektir. –

cevap

3

Qt4'te varsayılan olarak, bir QWidget kendi geçmişi için hiçbir şey çizmeyecek ve sadece onun çocukları çizilecektir. Bunu geçersiz kılmak istiyorsanız, özellikle widget'in arka planını özelliklerinden biri ile çizmesini söylemeniz gerekir. QWidget'ten türetilen bazı widget'ların otomatik olarak arka planlar oluşturacağını unutmayın.

+0

Önceden ayarlanmış arkaplan grubunu ('backgroundRole ') kaldırmak istemiyorum. –

+0

@ TomášZato: Bir önceki ayarı sorgulayıp hatırlamanın en kolay yolu ve bunu geri yüklemek için kullanmanın en kolay yolu. Daha güçlü yollardan biri, widget'ı ebeveyn için sorgulamak, ebeveynin arka plan rolünü almak ve widget'ı ayarlamaktır. Paletin geri kalanını olduğu gibi bırakmanız gerekiyorsa tüm bunlar karmaşıktır. –

2

Sen stil çok kolay tasarımcı test edilebilir, ben

MyWidget {background-color: none;}

çalışması gerektiğini düşünüyorum Widget'ınızın tarzını değiştirerek size gerekli olan tüm çizim özelleştirme yapmak mümkün olmalıdır

+0

Eğer bunu bir QLineEdit üzerinde yaparsanız, arka planı şeffaf olmayandan beyaza (PyQt kullanıyorum), hatta istenmeyen bir şekilde değiştirir. Komik etkisi. Ama ben qss kullanarak çoğu zaman oldukça rahat katılıyorum katılıyorum. – Trilarion

0

Sen bakmak isteyebilirsiniz:

setAttribute (Qt :: WA_NoSystemBackground, true);

ve

setAttribute (Qt :: WA_OpaquePaintEvent, yalancı);

0

benim için çalıştı çözeltisi (Ben QTextEditor için şeffaf bir arka plan batıyordu):

auto editorPalette = editorWidget->palette(); 
editorPalette.setColor(QPalette::Active, QPalette::Base, Qt::transparent); 
editorPalette.setColor(QPalette::Inactive, QPalette::Base, Qt::transparent); 
editorWidget->setPalette(editorPalette); 
İlgili konular