2012-04-20 44 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 2013-08-11 15:39:15

+0

不會泄漏每個構造上的QPixmap嗎? – Ruslan 2017-10-20 21:25:22

+0

@Ruslan是的,但主窗口只在大多數qt應用程序中創建一次 – 2017-10-21 06:35:07

2

Here是用半透明背景顏色製作小部件的配方。通過使背景完全透明從那裏展開,然後將樹形圖像顯示爲背景圖像。請注意,在佈置其子元素方面,小部件的行爲仍然像矩形小部件,因此您可能需要在樹形狀內使用一些自定義佈局來處理此問題。

0

開始從文檔的QWidget::setMask。它有一個採用QBitmap的版本和一個採用QRegion的版本。這是獲取透明小部件的基本功能。該工具包還包括一個使用QRegion版本的時鐘示例 - 我懷疑位圖是一樣容易。