窗口作为界面编程中最重要的部分,没有窗口就没有界面,是窗口让我们摆脱了DOS时代,按钮是一个窗口,文本框是一个窗口,标签页是一个窗口,。。。一个窗口可以由多个窗口组成,每天我们都在与窗口打交道,当你打开windows时,桌面就是一个窗口,你打开浏览器时,你也正在访问窗口。。。好了,回到今天的话题,QT窗口系统,QT是一个跨平台的框架,类似微软的MFC,Borland的OWL,前者只适用于windows,而使用QT你可以开发windows平台应用程序,你也可以开发linux应用程序,当然了你也可以用于Symbian、Meego的开发,据说,QT未来还会支持Android,iOS等操作系统。更让人欣喜的是,QT是开源的,你可以看到所有QT的源代码,而且帮助文档很详细,可以说,QT是一个很有前途的开发框架,如果大家想要转到QT平台做开发,深入了解QT的窗口系统是很有必要的。

QWidget的是所有窗体的基类,按钮,文本框,对话框都派生自它,所以了解它的特性后,所有窗体的基本属性都了解了。

1.Qt窗体的几何属性(下图是典型的QT窗口):

灰色部分是窗体的边框,白色区域为窗口的内容区域,绿色区域为窗口标题,QWidget提供1组接口访问窗口的几何特性

(1)包含窗口边框的函数: x()y()frameGeometry()pos(), 和 move()

(2)不包含窗口边框的函数: geometry()width()height()rect(), 和size()

下面用一个实例来说明窗口这几个几何特性:

  1. void print(QWidget *pWidget)
  2. {
  3. qDebug() << "this includes the window frame";
  4. qDebug() << "frameGeometry() = " << pWidget->frameGeometry();
  5. qDebug() << "pos() = " << pWidget->pos();
  6. qDebug() << "x() = " << pWidget->x() << "y() = " << pWidget->y();
  7. qDebug() << "frameSize() = " << pWidget->frameSize();
  8. qDebug() << "this excludes the window frame";
  9. qDebug() << "geometry() = " << pWidget->geometry();
  10. qDebug() << "rect() = " << pWidget->rect();
  11. qDebug() << "contentRect() = " << pWidget->contentsRect();
  12. qDebug() << "width() = " << pWidget->width() << "height() = " << pWidget->height();
  13. qDebug() << "size() = " << pWidget->size();
  14. }
  15. int main(int argc, char *argv[])
  16. {
  17. QApplication a(argc, argv);
  18. QWidget widget;
  19. widget.resize(200, 300);
  20. widget.show();
  21. print(&widget);
  22. return a.exec();
  23. }

显示的窗体大小为,宽为200,高为300,注意,这里的尺寸是相对电脑的屏幕分辩率来说的,也即单位为像素,下面是输出结果,

this includes the window frame

frameGeometry() = QRect(88,116 208x334)

pos() = QPoint(88,116)

x() = 88 y() = 116

frameSize() = QSize(208, 334)

this excludes the window frame

geometry() = QRect(92,146 200x300)

rect() = QRect(0,0 200x300)

contentRect() = QRect(0,0 200x300)

width() = 200 height() = 300

size() = QSize(200, 300)

可以看到包括边框的矩形宽度为208,高度为334;不包括边框的矩形宽度为200,高度为300,这正是我们通过resize设置的尺寸,由上图的窗口图形,不难得出,边框的宽度为4,标题的高度为26。

通过上面的介绍,我们知道了窗体的基本几何属性,也知道怎么去获取这些属性,QWidget有没有提供设置这些属性的方法呢?边框的宽度始终是4吗?标题的高度始终是26吗?有没有办法设置边框的宽度呢?有没有办法设置标题的高度呢?

这些问题留到下一次再介绍。

http://blog.csdn.net/LazyDreamHunter/article/list/3

深度探索QT窗口系统(五篇)的更多相关文章

  1. 界面编程之QT窗口系统20180726

    /*******************************************************************************************/ 一.坐标系统 ...

  2. Android窗口系统第一篇---Window的类型与Z-Order确定

    Android的窗口系统是UI架构很重要的一部分,数据结构比较多,细节比较多.本篇文章主要介绍窗口相关数据结构和抽象概念理解,关于[窗口部分的博客]计划如下. 1.窗口Z-Order的管理 2.应用程 ...

  3. Android窗口系统第二篇---Window的添加过程

    以前写过客户端Window的创建过程,大概是这样子的.我们一开始从Thread中的handleLaunchActivity方法开始分析,首先加载Activity的字节码文件,利用反射的方式创建一个Ac ...

  4. Android深度探索-卷1第五章心得体会

    S3C6410是由三星公司推出的一款低功耗.高性价比的RISC处理器,开发是,首先安装minicom串口调试工具: 第一步:检测当前系统是否支持USB转串口. Lsmod | grep usseria ...

  5. Android窗口系统第三篇---WindowManagerService中窗口的组织方式

    Android窗口系统第一篇—Window的类型与Z-Order确定 Android窗口系统第二篇—Window的添加过程 上面文章梳理了一个窗口的添加过程,系统中有很多应用,每个应用有多个Activ ...

  6. “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构、登录窗口、以及主界面)

    “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构.登录窗口.以及主界面) 一.在上一篇文章中,主要说的就是把主框架搭建起来,并且Nhibernate能达到增 ...

  7. 第六篇 ANDROID窗口系统机制之显示机制

    第六篇 ANDROID窗口系统机制之显示机制 ANDROID的显示系统是整个框架中最复杂的系统之一,涉及包括窗口管理服务.VIEW视图系统.SurfaceFlinger本地服务.硬件加速等.窗口管理服 ...

  8. 在Qt 4.4中,Alien Widget诞生了(Window负责与窗口系统的联系。Alien被号称是所有闪烁的终结者)

    2011年09月29日 23:47:46 阅读数:7269 Qt 4.0 automatically double-buffers Qt 4.1 QWidget::autoFillBackground ...

  9. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

随机推荐

  1. windows如何获取Win10 Win8 Win8.1版本

    GetVersionEx 在win8 win8.1 win10 之后已经无法使用,如果非要使用的话需要让exe嵌入manifest,mainfest如下.这个文件需要已utf-8存储. <?xm ...

  2. JSP基础——关于中文乱码问题

    乱码问题十分烦人,今天在写一个登陆的demo时,表单中需要提交的中文姓名,如下代码 <form action="success.jsp" name="success ...

  3. Java学习之Java实现CallBack功能

    回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数.而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在 ...

  4. VUE.JS组件化

    VUE.JS组件化 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎 ...

  5. 一个简单的RTTI实现

    RTTI是"Runtime Type Information"的缩写,意思是:运行时类型信息.它提供了运行时确定对象类型的方法. 最近在写的一些东西,不想使用MFC之类的框架,但是 ...

  6. Delphi 函数指针(三大好处:灵活,委托的本质,回调机制),还可把函数指针当参数传入

    首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明 ...

  7. HDU 3468 Treasure Hunting(BFS+网络流之最大流)

    题目地址:HDU 3468 这道题的关键在于能想到用网络流.然后还要想到用bfs来标记最短路中的点. 首先标记方法是,对每个集合点跑一次bfs,记录全部点到该点的最短距离.然后对于随意一对起始点来说, ...

  8. ZOJ 3794 Greedy Driver spfa

    题意: 给定n个点,m条有向边,邮箱容量. 起点在1,终点在n,開始邮箱满油. 以下m行表示起点终点和这条边的耗油量(就是长度) 再以下给出一个数字m表示有P个加油站,能够免费加满油. 以下一行P个数 ...

  9. 提高你的Java代码质量吧:使用构造函数协助描述枚举项

    一.分析 一般来说,我们经常使用的枚举项只有一个属性,即排序号,其默认值是从0.1.2... ....但是除了排序号外,枚举还有一个(或多个)属性. 二.场景 比如,可以通过枚举构造函数声明业务值,定 ...

  10. javaScript 工作必知(五) eval 的使用

    eval eval(parse) parse :里面跟参数字符串,我们知道执行javascript 会编译执行,    改变全局变量的值: var x = 2; //定义的全局变量 alert(x); ...