2012-04-20 18 views

Odpowiedz

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

Nice! Inne podobne rzeczy: Zobacz przykład zegara: http://qt-project.org/doc/qt-4.8/widgets-shapedclock-shapedclock-cpp.html Dla PySide jest tutaj: http://qt.gitorious.org /pyside/pyside-examples/blobs/ce9b2dfe456f38a166314dc2807a6b27cd944127/examples/widgets/shapedclock.py Prosty przykład dla ekranów powitalnych: 'self.img_Check = QPixmap ("zasoby/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

Czy to nie przeciekło' QPixmap' na każdej konstrukcji? – Ruslan

+0

@Ruslan tak, ale mainwindow jest tworzony tylko raz w większości aplikacji qt. –

2

Here to przepis na wykonanie widżetu z półprzezroczystym kolorem tła. Po prostu rozwiń stamtąd, zwiększając przezroczystość tła, a następnie wyświetl obraz drzewa jako obraz tła. Zauważ, że widżet będzie nadal zachowywał się jak widżet prostokątny w odniesieniu do układania jego elementów potomnych, więc prawdopodobnie będziesz musiał zająć się tym za pomocą niestandardowego układu wewnątrz kształtu drzewa.

0

zacząć od docs dla QWidget::setMask. Ma wersję, która pobiera QBitmap i posiada QRegion. Jest to podstawowa funkcja uzyskiwania przezroczystego widgetu. Zestaw narzędzi zawiera również przykład zegara z wersją QRegion - podejrzewam, że bitmapa jest równie łatwa.