2012-05-04 107 views
3

QDialogの背景を透明にして、私がウィンドウを透けるようにしたい。私は "丸いコーナーウィンドウ"錯覚を作成する半透明の背景イメージを使用したいので、私は尋ねています。 setOpacityを使用することは、すべてのウィジェットを完全に不透明にしたいので、私の選択肢ではありません。透明な背景色のQDialog

ネイティブOS APIを使用せずにこれを達成する方法はありますか?

+0

可能重複透明な背景](http://stackoverflow.com/questions/4278723/a-qt-widget-withfully-transparent-background) –

答えて

10

QWidget::setAttribute(Qt::WA_TranslucentBackground);を使用してください。これにはQt::FramelessWindowHintも設定する必要があります。

この例は、私の作品:角丸について

#include <QtGui> 

class Dialog : public QDialog 
{ 
public: 
    Dialog() : QDialog(0, Qt::FramelessWindowHint) // hint is required on Windows 
    { 
     QPushButton *button = new QPushButton("Some Button", this);  
     setAttribute(Qt::WA_TranslucentBackground); 
    } 

}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    Dialog d; 
    d.show(); 
    return a.exec(); 
} 

QWidget::setMask()がお手伝いします。

編集:コメント欄に以下の別の質問を受けて、ここではリソースファイル内の画像を使用して実施例であり、それはQWidget::paintEvent()上書きします:完全と[QTウィジェットの

#include <QtGui> 

class Dialog : public QDialog 
{ 
public: 
    Dialog() : QDialog(0, Qt::FramelessWindowHint) // hint is required on Windows 
    { 
     setFixedSize(500, 500); // size of the background image 
     QPushButton *button = new QPushButton("Some Button", this); 
     setAttribute(Qt::WA_TranslucentBackground); 
    } 

protected: 
    void paintEvent(QPaintEvent *event) 
    { 
     QPainter painter(this); 
     painter.drawImage(QRectF(0, 0, 500, 500), QImage(":/resources/image.png")); 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    Dialog d; 
    d.show(); 
    return a.exec(); 
} 
+0

素晴らしい、ありがとう! – Pieter

+0

私はこれを、半透明領域を含む背景画像と組み合わせて使用​​しようとしていますが、背景を半透明にすると、背景画像が消えることに気付きました。私が検討すべき選択肢はありますか? – Pieter

+2

@Pieter編集を参照してください。 – Anthony