2012-04-20 2 views

답변

4

After a long search , myself found a good solution , check out this ..

#include <QtGui> 
class myMainWindow:public QMainWindow 
{ 
public: 
    myMainWindow():QMainWindow() 
    { 
    setMask((new QPixmap("saturn.png"))->mask()); 


    QPalette* palette = new QPalette(); 
    palette->setBrush(QPalette::Background,QBrush(QPixmap("saturn.png"))); 
    setPalette(*palette); 

    setWindowFlags(Qt::FramelessWindowHint);  
    QWidget *centralWidget = new QWidget(this); 
    QGridLayout *layout = new QGridLayout(); 

    centralWidget->setLayout(layout); 

    QPushButton* button1 = new QPushButton("Button 1"); 
    button1->setFixedSize(80,50); 

    layout->addWidget(button1,0,0); 

    setCentralWidget(centralWidget); 

    }; 
    ~myMainWindow(){}; 
}; 

int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv); 
    myMainWindow *window = new myMainWindow();  

    window->resize(600, 316);   
    window->show(); 
    return app.exec(); 
} 
+0

니스! 다른 비슷한 일들 : 시계 예제를보십시오 : http://qt-project.org/doc/qt-4.8/widgets-shapedclock-shapedclock-cpp.html PySide의 경우 여기에 있습니다 : http://qt.gitorious.org 시작 화면에 대한 /pyside/pyside-examples/blobs/ce9b2dfe456f38a166314dc2807a6b27cd944127/examples/widgets/shapedclock.py 간단한 예 : 'self.img_Check = QPixmap ("자원/some_transparent_image.png") \t \t \t \t self.lab = QSplashScreen (self.img_Check) \t \t self.lab.setWindowFlags (Qt.Tool | Qt.WindowStaysOnTopHint) \t \t self.lab.setMask (self.img_Check.mask()) \t \t self.lab.setPixmap (self.img_Check) \t \t self.lab.show()' – SilentSteel

+0

각각의 구조에서'QPixmap'을 누설하지 않습니까? – Ruslan

+0

@Ruslan 예,하지만 mainwindow는 대부분의 Qt 앱에서 단 한 번만 생성됩니다. –

2

Here는 반투명 배경색으로 위젯을 만들기위한 제조법입니다. 배경을 완전히 투명하게 만들어 거기에서 확장 한 다음 트리 이미지를 배경 이미지로 표시하십시오. 위젯은 여전히 ​​자식 요소를 레이아웃하는 것과 관련하여 직사각형 위젯처럼 동작하므로 트리 모양 내부의 일부 사용자 정의 레이아웃을 사용하여 처리해야 할 수도 있습니다. QWidget::setMask에 대한 문서에서

0

시작. QBitmap을 사용하는 버전과 QRegion을 사용하는 버전이 있습니다. 이는 투명한 위젯을 얻는 기본적인 기능입니다. 이 툴킷에는 QRegion 버전을 사용하는 시계 예제가 포함되어 있습니다. 비트 맵도 쉽게 사용할 수 있습니다.