【实例】Qt创建不规则窗体

使用QT 开发不规则窗体 QT中使用不规则窗体,有面。 阅读详情

Qt创建不规则窗体

文档名称

Qt创建不规则窗体

创建时间

2012-9-10

修改时间

2012-9-10

创建人

Baifx

简介(收获)

利用setMask()为窗体设置遮罩,实现不规则窗体;

设置遮罩后的窗体尺寸仍是原窗体大小,只是被遮罩的地方不可见。

本实例实现了一个以PNG图形外沿为形状的不规则对话框。

       头文件源码如下:

class ShapeWidget : public QWidget

{

       Q_OBJECT

 

public:

       ShapeWidget(QWidget *parent = 0, Qt::WFlags flags = 0);

       ~ShapeWidget();

 

protected:

       void mousePressEvent( QMouseEvent * e );

       void mouseMoveEvent( QMouseEvent * e );

       void paintEvent( QPaintEvent * e );

      

private:

       QPoint dragPosition;

};

       ShapWidget即为不规则窗体类,继承自QWidget类。在类中重定义的鼠标事件mousePressEvent()mouseMoveEvent()以及绘制函数paintEvent(),使不规则窗体能用鼠标随意拖动。

       ShapWidget的构造函数是实现不规则窗体的关键。具体代码如下:

ShapeWidget::ShapeWidget(QWidget *parent, Qt::WFlags flags)

       : QWidget(parent, flags)

{

       QPixmap pix;

       pix.load( ".//Resources//tux.png", 0, Qt::AvoidDither | Qt::ThresholdDither | Qt::ThresholdAlphaDither );

       resize( pix.size() );

       setMask( pix.mask() );

}

       QPixmapload()函数为QPixmap对象填入图像值,load()函数原型如下:

bool load( const QString & filename, const char * format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor );

       参数fileName为图片文件名;参数format表示读取图片文件采用的格式,此处为0即采用默认的格式;参数flags表示读取图片的方式,由Qt::ImageConversionFlag定义,此处设置的标识为避免图片的抖动方式。

       setMask()命令是实现不规则窗体的关键,setMask()的作用是为调用它的控件增加一个遮罩,遮住所选区域以外的部分使之看起来是透明的,它的参数可为一个QBitmap对象或一个QRegion对象,此处调用QPixmapmask()函数获得图片自身的遮罩,为一个QBitmap对象。实例中使用的是png格式的图片,它的透明部分实际上即使一个遮罩。

       重定义鼠标按下响应事件和鼠标移动响应事件,使不规则窗体能响应鼠标事件,随意拖动。具体代码如下:

void ShapeWidget::mousePressEvent( QMouseEvent * e )

{

       if ( e->button() == Qt::LeftButton )

       {

              dragPosition = e->globalPos() - frameGeometry().topLeft();

              e->accept();

       }

 

       if ( e->button() == Qt::RightButton )

       {

              close();

       }

}

       鼠标按下首先判断按下的是否为鼠标左键,是则保存当前鼠标点所在位置相对于窗体左上角的偏移值dragPosition;否则关闭窗体。

       注意:此处的frameGemetry().topLeft()仍然表示整个窗体的左上角,而并不是所见的不规则窗体的左上角。

 

void ShapeWidget::mouseMoveEvent( QMouseEvent * e )

{

       if ( e->buttons() & Qt::LeftButton )

       {

              move( e->globalPos() - dragPosition );

              e->accept();

       }

}

       在鼠标移动响应函数中,首先判断当前鼠标状态,若为左侧按钮则调用QWidgetmove()函数吧窗体移动至鼠标当前点,由于move()函数的参数指的是窗体的左上角的位置,因此要用鼠标当前点位置减去相对窗体左上角的偏移值dragPosition

 

void ShapeWidget::paintEvent( QPaintEvent * e )

{

       QPainter painter( this );

       painter.drawPixmap( 0, 0, QPixmap( ".//Resource//tux.png" ) );

}

       ShapWidget的重画函数主要完成在窗体上绘制图片的工作,此处为方便显示在窗体上绘制的即是用来确定窗体外形的PNG图片。

 




FROM:  http://blog.chinaunix.net/uid-25806493-id-3343613.html

QT不规则窗体的使用 不规则窗体的使用程序效果展示 程序 //.h #ifndef SHAPEWIDGET_H #define SHAPEWIDGET_H #include <QWidget> #include <QMouseEvent> #include <QPainter> #include <QPixmap> #include <QBitmap> cl... 阅读详情

相关推荐

Qt之遮罩—实现不规则窗体

使用遮罩可以将窗口形状多样化,变成各种各样的图片或者图形,相信看完这篇文章可以让你实现多样化窗口和部件时更加游刃有余!

Jacksqh的博客 2578

qt写的简单的不规则透明窗口

简单的不规则透明窗口,仅仅提供思路,初学者参考即可

qt实现在图片中绘制不规则曲线的功能

qt实现在图片中绘制不规则曲线的功能

希望我的博客,能帮上你解决学习中工作中所遇到的问题 414

Qt 不规则窗口,不规则按钮,不规划控件 不规则界面

Qt 实现 不规则样式设置,不是视觉欺骗,是真正的不规则 ,点击外面不会触发按钮的点击信号.另一种方式实现,通过 setStyleSheet 这种方式用于 Button较多;//实际图片大小,否则会变成填充;效果,只有点击到有色图,才会有点击信号;实现了,按钮和图像一致;见视频,可见,点击到空白处,消失;可见实现了真正的无规则界面;显示成一张图片中的图形,使用带有透明区域的png图片;必须重新绘制,构造函数也一定要调用resize。另外一种方式实现,重写按钮类;

q610098308的专栏 2074

Qt创建图片为背景的不规则窗体

Qt可以通过重载 void paintEvent(QPaintEvent*) 的方式创建自己想要的窗体。         首先设置窗体的属性:             setWindowFlags(Qt::WindowStaysOnTopHint | Qt::Frameles

潇的专栏 1967

Qt中如何利用 png 图片来实现自定义形状的窗口

various window-system properties for the widget. They are fairly unusual but necessary in a few cases. Some of these flags depend on whether the underlying window manager supports them.]。使用 Qt::Window

my_friend_ship的专栏 1565

qml widget拖动窗口、控件

总是要搜索,来收集一下常用的操作: QWidget鼠标拖拽键盘事件: void BaseWidget::mousePressEvent(QMouseEvent *e) { if(e->button() == Qt::LeftButton) { //计算拖拽距离 dragPosition = e->globalPos() - frameGeometry().topLeft(); leftbuttonpressed = true; } } void BaseWidget::

caicai_xiaobai的博客 413

Qt之对话框设计——不规则窗体

shapewidget.h #ifndef SHAPEWIDGET_H #define SHAPEWIDGET_H #include <QtGui> class QPoint; class ShapeWidget : public QWidget { Q_OBJECT public: ShapeWidget(QWidget *parent ...

weixin_30861459的博客 83

Qt框架中的不规则窗体实现技巧

在现代图形用户界面(GUI)设计中,不规则窗体已经成为一种趋势。它们为应用程序提供了一个更自由、更具表现力的界面设计空间。不规则窗体突破了传统矩形窗口的限制,让窗体可以模仿自然界中的形状,或者更贴合应用内容的视觉表达。由于其外观更接近于真实世界中物体的轮廓,它们在用户体验(UX)设计中显得尤为重要。Qt框架提供了强大的工具来创建和管理不规则窗体,而这一切的关键在于对的深入理解和运用。通过,开发者可以定义复杂的形状,利用函数实现窗体的绘制,最终达到在屏幕上渲染自定义形状的效果。

weixin_36311421的博客 997

Qt实现不规则窗体

Qt实现不规则窗体

m0_60440984的博客 1576

Qt|制作简单的不规则窗体

通常我们用到的对话框基本上都是规则的,在有些特殊情况下,也会使用到不规则窗口,那么该如何实现不规则窗体呢?在MFC框架下很难实现,应该说是难的都想放弃,但是,Qt框架下提供了一个叫做setMask()函数,用来实现不规则窗体,为窗体设置遮罩。在今天的功能介绍中,主要是围绕如何setMask()函数进行讲解的。首先,我们看一下实现出来的效果吧!功能:点击鼠标左键拖动窗口进行移动,鼠标右键销毁当前窗口。用到的事件:鼠标按下事件、鼠标拖动事件、绘图事件。

糯诺诺米团 1386

Qt不规则窗体和部件的实现

描述:a.png    窗口背景图 图片: 描述:mask.png    窗口掩码图 图片: 描述:toolbutton.png    按钮背景图 图片: 描述:toolbutton_mask.png    按钮掩码图 图片: 描述:runtime.png    示例运行时图 图片

认真梳理 924

Qt实现不规则窗体--升级版

运行效果 基于Qt实现不规则窗体,网上的教程千篇一律都是使用遮罩实现的,就像下面这样: m_Pixmap.load("delete.png"); resize( m_Pixmap.size() ); setMask( m_Pixmap.mask() ); 虽然这样做确实可以实现不规则窗体,但是我想自己通过绘图事件来绘制不规则窗体,而不是使用图片,这样自由度就大一些,就可以更快乐的玩耍了,所以我想借鉴双缓冲绘图原理,先在QPixmap上绘制,然后再将QPixmap绘制到窗体上,

贝勒里恩的博客 677

Qt学习15——不规则窗体

Qt不规则窗体的实现,是在原来窗口图形的基础上,增加图形遮罩,剩余部分为最终显示的窗口图形。

shawn06 1110

Qt下实现不规则形状窗口显示

本文实现了Qt下显示两个不规则形状的窗口demo,其中有Qt的窗口对话框和QPaintEvent及QMouseEvent的简单使用。

XCJandLL的博客 2474

Qt透明边框

要先去窗口边框,再把窗口设置为透明 #include "widget.h" #include "ui_widget.h" #include <QPainter> #include <QMouseEvent> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ...

qq_36261988的博客 720

Qt 实现绘制不规则窗口(控件)

Qt 实现绘制不规则窗口(控件)

qq_33259248的博客 965

QT绘制不规则多边形(附完整源码)

QT绘制不规则多边形(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 566
上一篇: Qt 2D绘图
下一篇: Qt 不规则窗体编程
imxiangzi
博客等级 码龄19年 1278粉丝 18原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值