在 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 中创建一个带有图像形状的窗口的主要内容,如果未能解决你的问题,请参考以下文章