特别注意:如果想把做一个先把图画在内存中,在显示到页面,不要使用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的作用的更多相关文章

  1. Qt中QT_BEGIN_NAMESPACE和QT_END_NAMESPACE的作用

    在Qt中,我们经常会看到 QT_BEGIN_NAMESPACE class QAction; class QMenu; class QPlainTextEdit; QT_END_NAMESPACE 这 ...

  2. Qt中常用知识点

    1:QRegExp 正则表达式 QRegExp regExp("[a-zA-Z][1-9][0-9]{0,2}"); xxx->setValidator(new QRegEx ...

  3. qt中ui的 使用介绍

    1.什么是ui?ui通常是用Qt 设计师设计出来的界面文件的后缀.通常情况下ui是一个指向这个界面类的指针.ui-> 一般就是用来访问这个界面类里面的控件.例如你的ui文件里有一个叫okButt ...

  4. QT 中 关键字讲解(emit,signal,slot)

    Qt中的类库有接近一半是从基类QObject上继承下来,信号与反应槽(signals/slot)机制就是用来在QObject类或其子类间通讯的方法.作为一种通用的处理机制,信号与反应槽非常灵活,可以携 ...

  5. Qt中使用ActiveX(3篇)

    由于最近需要使用ActiveX,一般来说可以使用微软提供的MFC或者ATL框架来开发,由于我个人对这部分内容不是很熟悉,好在Qt也提供对于ActiveX的支持.本文主要记录个人学习ActiveX的一些 ...

  6. Qt中QObject中的parent参数

    今天写了一个小程序,验证了带参的构造函数中参数parent的作用. 在MainWindow中声明一个QDialog类型的指针,在MainWindow中对它进行初始化.我采用了两种初始化方式,一种是带参 ...

  7. Qt中的 Size Hints 和 Size Policies

    sizeHint 这个属性所保存的 QSize 类型的值是一个被推荐给窗口或其它组件(为了方便下面统称为widget)的尺寸,也就是说一个 widget 该有多大,它的一个参考来源就是这个 sizeH ...

  8. 解析Qt中QThread使用方法

    本文讲述的是在Qt中QThread使用方法,QThread似乎是很难的一个东西,特别是信号和槽,有非常多的人(尽管使用者本人往往不知道)在用不恰当(甚至错误)的方式在使用QThread,随便用goog ...

  9. Qt中如何写一个model

    在qt中,用到最多就是model/view的结构来表示数据层及表示层的关系.model用于给view提供数据.那如何来实现一个简单的树形model呢. 实现一个自己的model需要重载以下的方法: Q ...

随机推荐

  1. Object-C 多线程中锁的使用-NSLock

    在多线程的编程环境中,锁的使用必不可少! 于是,今天来总结一下为共享资源加锁的操作方法.   一.使用synchronized方式   //线程1 dispatch_async(dispatch_ge ...

  2. 【转载】解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问的方法

    1.开启Ad Hoc Distributed Queries组件,在sql查询编辑器中执行如下语句: exec sp_configure 'show advanced options',1 recon ...

  3. java面试(6)

    1  六大原则 详情参考:设计模式六大原则(转载). 2  UML类之间关系有几种?聚合和组合区别? 类之间可能存在以下几种关系:关联(association).依赖(dependency).聚合(A ...

  4. oracle数据库中函数的递归调用

    如有下面的表结构AAAA,用一个字段prev_id表示记录的先后顺序,要对其排序,需要用的递归函数 ID PREV_ID CONT 99   a 23 54 d 21 23 e 54 33 c 33 ...

  5. redis学习六 集群的原理(转载)

    转载自 http://shift-alt-ctrl.iteye.com/blog/2285470 一.Redis Cluster主要特性和设计     集群目标 1)高性能和线性扩展,最大可以支撑到1 ...

  6. 用CSS使图片上下左右都绝对居中于DIV

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. nginx反向代理负载均衡初次配置

    反向代理,我个人理解是通过一台反向代理服务器,把客户端的把有请求按照一定的规则分发给后台的服务器.nginx作反向代理服务器的虚拟机配置如下: upstream itest { #正常情况下应该作如下 ...

  8. Java面向对象-面向对象编程之基本概念

    面向对象这个概念,每本书上的说法定义很多. 我自己根据我的经验,自己归档总结了下, 所谓面向对象,就是 以基于对象的思维去分析和解决问题,万物皆对象: 面向对象经常和面向过程放一起讨论: 这里举例, ...

  9. 提高ListView的效率

    按照普通的写法,如果ListView里面有比较多的东西的话,在加载每一个Item的时候,是非常非常卡的.具体表现就是滚动起来的时候会看见明显的卡顿. 关键还是处理自定义Adapter里面的getVie ...

  10. Android UI学习 - ListView (android.R.layout.simple_list_item_1是个什么东西)

    Android UI学习 - ListView -- :: 标签:Android UI 移动开发 ListView ListActivity 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始 ...