QT中不规则窗口的实现

描述:mask.png 窗口掩码图
图片: 
描述:toolbutton.png 按钮背景图
图片: 
描述:toolbutton_mask.png 按钮掩码图
图片: 
描述:runtime.png 示例运行时图
图片: 
Qt 中不规则窗体和部件的实现,不管是窗体还是部件,都是从QWidget派生而来的,所以它们的原理是一样的,都是设置部件的背景色或者按钮图标等为一个图 像A,然后设置此部件的掩码为另一个图像B,这个图像B经过位与运算后,得到不规则的图像,这就行了下面,是一个简单的示例:
form.h:
Quote:

#ifndef FORM_H
#define FORM_H

#include <QtGui/QWidget>

class Form : public QWidget
{
Q_OBJECT
public:
Form();
~Form();
};

#endif


form.cpp:
Quote:

#include <QtGui/QPixmap>
#include <QtGui/QBitmap>
#include "toolbutton.h"
#include "form.h"

Form::Form()
{
QPalette p = palette();
QPixmap img("a.png");
QBitmap mask("mask.png");
p.setBrush(QPalette::Window, QBrush(img));
setPalette(p);
setMask(mask);
setWindowFlags(Qt::FramelessWindowHint);

resize(600, 400);

ToolButton *button = new ToolButton(this);
button->move(200, 200);
}

Form::~Form()
{
}


toolbutton.h:
Quote:

#ifndef TOOLBUTTON_H
#define TOOLBUTTON_H

#include <QtGui/QToolButton>

class ToolButton : public QToolButton
{
Q_OBJECT
public:
ToolButton(QWidget *parent=0);
~ToolButton();
};

#endif


toolbutton.cpp:
Quote:

#include <QtGui/QPixmap>
#include <QtGui/QBitmap>
#include "toolbutton.h"

ToolButton::ToolButton(QWidget *parent)
: QToolButton(parent)
{
/*
// 如果是非按钮类部件,则使用此段代码
QPalette p = palette();
p.setBrush(QPalette::Button, QBrush(QPixmap("toolbutton.png")));
setPalette(p);
/*/
// 如果是按钮类部件,则使用此段代码
setIcon(QIcon("toolbutton.png"));
setIconSize(QSize(48, 48));
//*********************************/
setMask(QBitmap("toolbutton_mask.png"));

setFixedSize(48, 48);
}

ToolButton::~ToolButton()
{
}


main.cpp:
Quote:

#include <QtGui/QApplication>
#include "form.h"

int main(int argc, char **argv)
{
QApplication app(argc, argv);
Form form;
form.show();
return app.exec();
}

原文: www.qtcn.org/bbs/read.php
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值