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

Posted

技术标签:

【中文标题】在 qt 中创建一个带有图像形状的窗口【英文标题】:Create a window in qt with shape from an image 【发布时间】:2012-04-20 06:02:00 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

不错!对于其他类似的事情:查看时钟示例:qt-project.org/doc/qt-4.8/… PySide 在这里:qt.gitorious.org/pyside/pyside-examples/blobs/… 启动屏幕的简单示例:self.img_Check = QPixmap("resources/some_transparent_image.png") self.lab = QSplashScreen(self.img_Check) self.lab.setWindowFlags(Qt.Tool | Qt.WindowStaysOnTopHint) self.lab.setMask(self.img_Check.mask()) self.lab.setPixmap(self.img_Check) self.lab.show() 在每个构造中它不会泄漏QPixmap 吗? @Ruslan 是的,但是在大多数 qt 应用程序中主窗口只创建一次 这是真的,但我认为使用QPixmap("saturn.png").mask() 而不是显式泄漏像素图更简洁(在语法和语义上)。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于在 qt 中创建一个带有图像形状的窗口的主要内容,如果未能解决你的问题,请参考以下文章

如何在不同的 QT 线程中创建一个窗口?

QT中想在子线程中创建对话窗口怎么建

在 QDialog 中创建线程并在 Qt 中向 QDialog 发出信号

用Qt在窗口中创建按钮

用Qt在窗口中创建按钮

Qt PushButton 显示图像