Qt中QBitmap 的使用 --QBitmap的作用
特别注意:如果想把做一个先把图画在内存中,在显示到页面,不要使用bitmap,这个只有单色;
一般情况下QBitmap只作为图片掩码使用,比如做不规则窗口。
QBitmap表示一种只有黑白的单色图片,类似于mfc中的位图。该类主要用于创建自定义的光标和画刷对象,以及创建区域对象和为某个空间设置掩码图片。
QBitmap派生自QPixmap类,它的颜色深读为1。当然,空的QBitmap对象的颜色深度为0。所以,如果我们将一个颜色深度大于1的图片赋值给bitmap,bitmap会自动发生抖动,将图片颜色变为黑白色。
当然,我们也可以单独创建一个QBitmap对象,然后使用Qt::color0和Qt::color1对它进行填充。其中,使用Qt::color0会将QBitmap的所有位置0,Qt::color1则会将QBitmap的所有位置1。而对一个位图来说,0代表背景(或透明像素),1代表前景(或不透明像素)。当然,我们还可以使用该类的成员函数clear()将QBitmap对象的所有位置为Qt::color0。
但要注意的是,使用Qt::black 和 Qt::white是没有意义的,因为QColor::pixel()不一定是用0表示黑色,用1表示白色的。
另外,QBitmap还提供了两个常用的静态方法。fromData()可以用一个uchar数组来构建一个QBitmap对象,所以我们可以先把一个图片使用QFile读到内存中,然后使用该方法构建出一个QBitmap对象;而另一个fromImage()则提供了将一个QImage转换成QBitmap的方法。
下面,我们写一个简单的例子,将一张图片分别以QBitmap和QPixmap的形式绘制到窗口上,来看一下它们的效果和区别。
新建一个GUI程序,将准备好的一张图片作为资源添加到工程中,然后,重写窗口类的paintEvent(QPaintEvent*)方法,进行绘图。
代码如下:
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QBitmap bitmap(":/1.png");
QPixmap pixmap(":/1.png");
painter.drawPixmap(, , rect().width()/, rect().height(), bitmap);
painter.drawPixmap(rect().width()/, , rect().width()/, rect().height(), pixmap);
}
Qt中QBitmap 的使用 --QBitmap的作用的更多相关文章
- Qt中QT_BEGIN_NAMESPACE和QT_END_NAMESPACE的作用
在Qt中,我们经常会看到 QT_BEGIN_NAMESPACE class QAction; class QMenu; class QPlainTextEdit; QT_END_NAMESPACE 这 ...
- Qt中常用知识点
1:QRegExp 正则表达式 QRegExp regExp("[a-zA-Z][1-9][0-9]{0,2}"); xxx->setValidator(new QRegEx ...
- qt中ui的 使用介绍
1.什么是ui?ui通常是用Qt 设计师设计出来的界面文件的后缀.通常情况下ui是一个指向这个界面类的指针.ui-> 一般就是用来访问这个界面类里面的控件.例如你的ui文件里有一个叫okButt ...
- QT 中 关键字讲解(emit,signal,slot)
Qt中的类库有接近一半是从基类QObject上继承下来,信号与反应槽(signals/slot)机制就是用来在QObject类或其子类间通讯的方法.作为一种通用的处理机制,信号与反应槽非常灵活,可以携 ...
- Qt中使用ActiveX(3篇)
由于最近需要使用ActiveX,一般来说可以使用微软提供的MFC或者ATL框架来开发,由于我个人对这部分内容不是很熟悉,好在Qt也提供对于ActiveX的支持.本文主要记录个人学习ActiveX的一些 ...
- Qt中QObject中的parent参数
今天写了一个小程序,验证了带参的构造函数中参数parent的作用. 在MainWindow中声明一个QDialog类型的指针,在MainWindow中对它进行初始化.我采用了两种初始化方式,一种是带参 ...
- Qt中的 Size Hints 和 Size Policies
sizeHint 这个属性所保存的 QSize 类型的值是一个被推荐给窗口或其它组件(为了方便下面统称为widget)的尺寸,也就是说一个 widget 该有多大,它的一个参考来源就是这个 sizeH ...
- 解析Qt中QThread使用方法
本文讲述的是在Qt中QThread使用方法,QThread似乎是很难的一个东西,特别是信号和槽,有非常多的人(尽管使用者本人往往不知道)在用不恰当(甚至错误)的方式在使用QThread,随便用goog ...
- Qt中如何写一个model
在qt中,用到最多就是model/view的结构来表示数据层及表示层的关系.model用于给view提供数据.那如何来实现一个简单的树形model呢. 实现一个自己的model需要重载以下的方法: Q ...
随机推荐
- apache 2 修改虚拟目录
准备好环境,就要开始进行开发了.这一篇,我们在Ubuntu Apache上配置虚拟目录. 知识准备: 区别于Windows 下apache,配置文件通常只有一个,就是httpd.conf. Linux ...
- innodb事务日志详解
首先看InnoDB的缓存和文件的关系图如下: InnoDB事务日志功能介绍 InnoDB使用日志来减少提交事务时的开销.因为日志中已经记录了事务,就无须在每个事务提交时把缓冲池的脏块刷新(flush) ...
- Ajax 请求session过期的统一处理
public class LoginInterceptor extends HandlerInterceptorAdapter { @SuppressWarnings("unused&quo ...
- 1138 Postorder Traversal
题意:给出二叉树的前序序列后中序序列,输出其后序序列的第一个值. 思路:乍一看不就是前序+中序重建二叉树,然后后序遍历嘛!这么做当然不会有错,但是却没有真正领会本题的意图.本题并不是让我们输出后序序列 ...
- oracle里的查询转换
oracle里的查询转换的作用 Oracle里的查询转换,有称为查询改写,指oracle在执行目标sql时可能会做等价改写,目的是为了更高效的执行目标sql 在10g及其以后的版本中,oracle会对 ...
- Excel开发学习笔记:查找与创建worksheet
开发环境基于VSTO,具体配置:visual studio 2010,VB .Net,excel 2007,文档级别的定制程序. 如题,我在ThisWorkbook.vb中添加了一个public函数来 ...
- 参数传递中编码问题(Get/Post 方式)(一)
用JAVA在做一个支付接口时,需要和表现层的UTF8代码进行报文交换,因JAVA是GBK编码的,因此出现了小插曲.为此,花了点时间,重新梳理一下相关知识点. 以下内容是我转载的,觉得挺好的.... 一 ...
- a标签什么时候可以设置宽高
行内元素(如a标签),在文档流中的时候因为是行内元素所以无法设置宽高:而当设置了绝对定位或者浮动,会生成块框(即变成块元素),所以就可以设置宽高了
- call()和apply()的认知
apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,args)方法能接收两个参数 obj:这个对象将代替Function类里this对象 arg ...
- String类的内存分配
首先说一下Java内存分配.物理的内存是线性结构,并不存在拥有不同功能的不同区域,编译器(或者JVM)为了更高效地处理数据,会用不同的算法把内存分为各种区域,不同的区域拥有各自的特性,Java中,内存 ...