在 qt 中创建一个带有图像形状的窗口

Create a window in qt with shape from an image

本文关键字:图像 窗口 一个 qt 创建      更新时间:2023-10-16

有人可以解释我如何根据图像中某些对象的形状在qt中制作窗口,例如我有一个树的图像,使用它我需要创建一个树形状的窗口..

经过长时间的搜索,我自己找到了一个很好的解决方案,看看这个..

#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();
}

这是制作具有半透明背景颜色的小部件的配方。只需通过使背景完全透明来从那里展开,然后将其上的树图像显示为背景图像。请注意,在布局其子元素方面,小部件的行为仍然像矩形小部件,因此您可能需要使用树形中的一些自定义布局来处理这个问题。

QWidget::setMask的文档开始。它有一个采用QBitmap的版本和一个采用QRegion的版本。这是获取透明小部件的基本功能。该工具包还包括一个使用 QRegion 版本的时钟示例——我怀疑位图也同样简单。