2012-04-20 24 views

Respuesta

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

¡Agradable! Para otras cosas similares: Vea el ejemplo del reloj: http://qt-project.org/doc/qt-4.8/widgets-shapedclock-shapedclock-cpp.html Para PySide está aquí: http://qt.gitorious.org /pyside/pyside-examples/blobs/ce9b2dfe456f38a166314dc2807a6b27cd944127/examples/widgets/shapedclock.py ejemplo simple para pantallas de inicio: 'self.img_Check = QPixmap ("recursos/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

¿No se filtra' QPixmap' en cada construcción? – Ruslan

+0

@Ruslan, sí, pero mainwindow se crea solo una vez en la mayoría de las aplicaciones qt –

2

Here es una receta para hacer un widget con un color de fondo semitransparente. Simplemente amplíe desde allí haciendo que el fondo sea completamente transparente, luego visualice la imagen del árbol encima de eso como una imagen de fondo. Tenga en cuenta que el widget seguirá comportándose como un widget rectangular en lo que respecta a la disposición de sus elementos secundarios, por lo que es probable que tenga que lidiar con esto usando un diseño personalizado dentro de la forma del árbol.

0

inicio de la documentación para QWidget::setMask. Tiene una versión que toma un QBitmap y uno que toma una QRegion. Esta es la función fundamental para obtener un widget transparente. El kit de herramientas también incluye un ejemplo de reloj con la versión QRegion. Sin embargo, sospecho que un mapa de bits es igual de fácil.

Cuestiones relacionadas