2010-11-25 39 views
8

他のウィジェットの親として機能し、それらを注文するQtウィジェットを作成する必要があります。完全に透明な背景を持つqtウィジェット

今、問題は完全に透明な背景にするにはどうすればいいですか?

私はこのようにそれを行うために考えた:

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

    QWidget *thisWidget; 
}; 

は、私は属性を設定する必要があると思いますか、またはそれなしで正常に動作するために起こっていますか?それは完全にあなたの問題を解決するかどうか

+0

は、あなたが本当に_transparent_背景が必要ですか、それは_no_背景を持っているのに十分ですか?これは本当の違いです:透明な背景では、OSは_underlying_ウィンドウにピクセルをペイントするように指示します。バックグラウンドがなければ、OSは子供がウィンドウ全体をペイントすることを期待しています。 – MSalters

+0

@MSaltersこのウィジェットはウィンドウ内の場所です。このウィジェットの子ウィジェットのみが表示されます。このウィジェットの背後にあるもの(子ウィジェットで覆われていないもの)は見なければなりません。 –

+0

私はこの質問を理解しているかどうか分かりません。Qt4ではデフォルトでQWidgetはその背景に何も描画せず、その子だけが描画されます。 –

答えて

3

デフォルトでQt4では、QWidgetはそれ自身の背景に対して何も描画せず、その子のみが描画されます。それをオーバーライドしたい場合は、具体的には、そのプロパティの1つを使って背景を描画するようウィジェットに指示する必要があります。 QWidgetから派生したウィジェットの中には、自動的に背景を描くものがあることに注意してください。

+0

以前に設定した背景( 'backgroundRole')を設定解除したいだけの場合はどうすればいいですか? –

+0

@TomášZato:以前の設定を照会して覚えて、それを復元するための最も簡単な方法。より難しい方法の1つは、ウィジェットの親に対してクエリを実行し、親のバックグラウンドロールを取得し、ウィジェットで設定することです。パレットの残りの部分をそのまま残す必要がある場合、これはすべて複雑です。 –

2

あなたはスタイルシートは、非常に簡単にデザイナーで試験することができる、私は

MyWidget {background-color: none;}

が動作するはずだと思うあなたのウィジェットのスタイルを変更することで、あなたが必要とするすべての描画のカスタマイズを行うことができるはず

+0

これをQLineEditで実行すると、背景が透明から白に変わります(私はPyQtを使用します)。面白い効果。しかし、私はqssの使用がほとんどの場合非常に快適であることに同意します。 – Trilarion

0

あなたが見てみたいことがあります。

のsetAttribute(Qtの:: WA_NoSystemBackground、真の);

のsetAttribute(Qtの:: WA_OpaquePaintEvent、偽);

0

私のために働いたソリューションは、(私がQTextEditorのための透明な背景を設定しました):

auto editorPalette = editorWidget->palette(); 
editorPalette.setColor(QPalette::Active, QPalette::Base, Qt::transparent); 
editorPalette.setColor(QPalette::Inactive, QPalette::Base, Qt::transparent); 
editorWidget->setPalette(editorPalette); 
関連する問題