QWidget类是所有用户界面对象的基类,每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。 先来看内容。

AD: 2013云计算架构师峰会超低价抢票中

QT 主要类 QWidget 是本文介绍的内容,QWidget类是所有用户界面对象的基窗口部件是用户界面的一个原子:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。

每一个窗口部件构造函数接受两个或三个标准参数:

QWidget *parent = 0是新窗口部件的父窗口部件。如果为0(默认),新的窗口部件将是一个顶级窗口部件。如果不是,它将会使parent的一个孩子,并且被parent的几何形状所强迫(除非你指定WType_TopLevel作为窗口部件标记)。 
const char *name = 0是新窗口部件的窗口部件名称。你可以使用name()来访问它。窗口部件名称很少被程序员用到,但是对于图形用户界面构造程序,比如Qt设计器,是相当重要的(你可以在Qt设计器中命名一个窗口部件,并且在你的代码中使用这个名字来连接它)。dumpObjectTree()调试函数也使用它。 
WFlags f = 0(在可用的情况下)设置窗口部件标记,默认设置对于几乎所有窗口部件都是适用的,但是,举例来说,一个没有窗口系统框架的顶级窗口部件,你必须使用特定的标记。

你自己将需要为你的窗口部件提供内容,但是这里是一些简要的运行事件,从最普通的开始:

paintEvent() - 只要窗口部件需要被重绘就被调用。每个要显示输出的窗口部件必须实现它并且不在paintEvent()之外在屏幕上绘制是明智的。

resizeEvent() - 当窗口部件被重新定义大小时被调用。

mousePressEvent() - 当鼠标键被按下时被调用。有六个鼠标相关事件,但是鼠标按下和鼠标释放事件是到目前为止最重要的。当鼠标在窗口部件内或者当它使用grabMouse()来捕获鼠标时,它接收鼠标按下事件。

mouseReleaseEvent() - 当鼠标键被释放时被调用。当窗口部件已经接收相应的鼠标按下事件时,它接收鼠标释放事件。这也就是说如果用户在你的窗口部件内按下鼠标,然后拖着鼠标到其它某个地方,然后释放,你的窗口部件接收这个释放事件。这里有一个例外:如果出现在弹出菜单中,当鼠标键被按下时,这个弹出菜单立即会偷掉这个鼠标事件。

mouseDoubleClickEvent() - 和它看起来也许不太一样。如果用户双击,窗口部件接收一个鼠标按下事件(如果他们没有拿牢鼠标,也许会出现一个或两个鼠标移动事件)、一个鼠标释放事件并且最终是这个事件。直到你看到第二次点击是否到来之前,不能从一个双击中辨别一个点击。(这是为什么绝大多数图形用户界面图书建议双击是单击的一个扩展,而不是一个不同行为的触发的一个原因。)

如果你的窗口部件仅仅包含子窗口部件,你也许不需要实现任何一个事件处理器。如果你想检测在子窗口部件中的鼠标点击,请在父窗口部件的mousePressEvent()中调用子窗口部件的hasMouse()函数。

接收键盘的窗口部件需要重新实现一些更多的事件处理器:(详见http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html#details )

QTime类提供了时钟时间功能。

QTime对象包含时钟时间,比如从午夜开始的时、分、秒和毫秒数。它可以从系统时钟中读取当前的时间并且度量时间的跨度。它提供比较时间和操作时间的函数,比如加上一定的秒或毫秒。

QTime操作的是24小时时钟格式,它没有AM/PM概念。它操作的是本地时间,它不知道有关时区或白天时间的概念。

QTime对象通常可以由明白地给定的时、分、秒和毫秒数字来创建,或者使用静态函数currentTime()让QTime对象包含系统时钟时间。注意精确性取决于下面操作系统的精确性,不是所有的操作系统都有毫秒级精确度的。

hour()、minute()、second()和msec()函数提供了对时、分、秒和毫秒数字的访问。toString()提供了文本格式的相同信息。

一个给定时间之后给定的秒或毫秒数的时间可以使用addSecs()或addMSecs()得到。相对地,两个时间的秒(或毫秒)数可以使用secsTo()或msecsTo()得到。

QTime可以使用start()、restart()和elapsed()函数度量流逝的时间。

  1. QTime QTime::currentTime () [静态]

返回当前时间,来自于系统时钟。

QTimer类提供了定时器信号和单触发定时器。

它在内部使用定时器事件来提供更通用的定时器。QTimer很容易使用:创建一个QTimer,使用start()来开始并且把它的timeout()连接到适当的槽。当这段时间过去了,它将会发射timeout()信号。

注意当QTimer的父对象被销毁时,它也会被自动销毁。

实例:

  1. QTimer *timer = new QTimer( myObject );
  2. connect( timer, SIGNAL(timeout()), myObject, SLOT(timerDone()) );
  3. timer->start( 2000, TRUE ); // 2秒单触发定时器

你也可以使用静态的singleShot()函数来创建单触发定时器。

作为一个特殊情况,一旦窗口系统事件队列中的所有事件都已经被处理完,一个定时为0的QTimer就会到时间了。

这也可以用来当提供迅速的用户界面时来做比较繁重的工作。

  1. QTimer *t = new QTimer( myObject );
  2. connect( t, SIGNAL(timeout()), SLOT(processOneThing()) );
  3. t->start( 0, FALSE );
  4. myObject->processOneThing()

将会被重复调用并且应该很快返回(通常在处理一个数据项之后),这样Qt可以把事件传送给窗口部件并且一旦它完成这个工作就停止这个定时器。这是在图形用户界面应用程序中实现繁重的工作的一个典型方法,现在多线程可以在越来越多的平台上使用,并且我们希望无效事件最终被线程替代。

注意QTimer的精确度依赖于底下的操作系统和硬件。绝大多数平台支持20毫秒的精确度,一些平台可以提供更高的。如果Qt不能传送定时器触发所要求的数量,它将会默默地抛弃一些。

另一个使用QTimer的方法是为你的对象调用QObject::startTimer()和在你的类中(当然必须继承QObject)重新实现QObject::timerEvent()事件处理器。缺点是timerEvent()不支持像单触发定时器或信号那样的高级水平。

一些操作系统限制可能用到的定时器的数量,Qt会尽力在限制范围内工作。

QButton类是按钮窗口部件的抽象基类,提供了按钮所共有的功能。

如果你想创建一个按钮,请使用QPushButton。 http://www.qtopia.org.cn/doc/qiliang.net/qt/qbutton.html

QButton类实现了一个抽象按钮,并且让它的子类来指定如何回复用户的行为和如何画按钮。

QButton提供了推动和切换按钮。QRadioButton和QCheckBox类只提供了切换按钮,QPushButton和QToolButton提供了切换按钮和推动按钮。

任何按钮都可以有一个文本的或者像素映射的标签。setText()设置按钮为一个文本按钮并且setPixmap()设置它为一个像素映射按钮。文本/像素映射的使用中需要创建当按钮被取消使用时所需的“失效的”外观。

QButton提供了按钮所要用到的绝大多数状态:

isDown()决定按钮是否被按下。

isOn()决定按钮是否是开的。只有切换按钮才能被切换为开或关(请看下面)。 
isEnabled()决定按钮是否可以被用户按下。

setAutoRepeat()决定如果用户按下按钮,按钮是否可以自动回复。

setToggleButton()决定按钮是否是一个切换按钮。

isDown()和isOn()的不同点如下:当用户点击一个切换按钮并且把它切换为开,按钮首先被按下并且然后被释放变为开状态。当用户再次点击(切换为关),按钮首先移动到被按下状态,然后变为关状态(isOn()和isDown()都为假)。

默认按钮(在很多对话框中被使用的)由QPushButton::setDefault()和QPushButton::setAutoDefault()提供。

QButton提供五个信号:

当鼠标光标在按钮内,鼠标左键被按下时,pressed()被发送。

当鼠标左键被释放时,released()被发送。

当按钮首先被按下然后又被释放或者快捷键被按下,或者当animateClick()被调用时,clicked()被发送。

当切换按钮的状态变化时,toggled(bool)被发送。

当一个三态切换按钮的状态变化时,stateChanged(int)被发送。

如果一个文本按钮的文本中有“&”,QButton会创建一个自动快捷键。下面的代码创建一个标签为“Rock & Roll”(c下面有下划线)的推动按钮。这个按钮有一个自动快捷键,Alt+C:

QPushButton *p = new QPushButton( "Ro&ck && Roll", this );  在这个实例中,当用户按下Alt+C时,按钮将会调用animateClick()。

你也可以使用setAccel()函数来设置一个定制的快捷键。这个对于绝大多数像素映射按钮是很有用的,因为它们没有自动快捷键。

QPushButton *p;    p->setPixmap( QPixmap("print.png") );    p->setAccel( ALT+Key_F7 );  Qt所提供的所有按钮(QPushButton、QToolButton、QCheckBox和QRadioButton)都能够既显示文本也显示像素映射。

为了继承QButton,你至少不得不重新实现drawButton()(绘制按钮的外形)和drawButtonLabel()(绘制它的文本或像素映射)。通常也被建议重新实现sizeHint(),并且有时也被建议重新实现hitButton()(为了决定一个按钮按下是否在按钮内)。

为了减少闪烁,QButton::paintEvent()设置drawButton()中所要画的一个像素映射。你不用在QButton的子类中重新实现paintEvent(),除非你想接管全部的绘制工作。

小结:关于详解 QT 主要类 QWidget 的内容介绍完了,希望本文对你有所帮助!

http://mobile.51cto.com/symbian-273170.htm

详解 QT 主要类 QWidget的更多相关文章

  1. 详解 QT 源码之 Qt 事件机制原理

    QT 源码之 Qt 事件机制原理是本文要介绍的内容,在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使 Qt 程序进入消息循环.下面我们就到ex ...

  2. 详解javascript的类

    前言 生活有度,人生添寿. 原文地址:详解javascript的类 博主博客地址:Damonare的个人博客 Javascript从当初的一个"弹窗语言",一步步发展成为现在前后端 ...

  3. CSS选择器详解(伪类) 转 http://blog.csdn.net/Panda_m/article/details/50084699

    CSS选择器详解 之 伪类 伪类对大小写不敏感 结构伪类选择器 结构伪类是CSS3新增的类型选择器,利用DOM树实现元素过滤,通过文档结构的相互关系来匹配元素,可以减少class和id属性的定义,使文 ...

  4. 第7.18节 案例详解:Python类中装饰器@staticmethod定义的静态方法

    第7.18节 案例详解:Python类中装饰器@staticmethod定义的静态方法 上节介绍了Python中类的静态方法,本节将结合案例详细说明相关内容. 一.    案例说明 本节定义了类Sta ...

  5. OkHttp3源码详解(一) Request类

    每一次网络请求都是一个Request,Request是对url,method,header,body的封装,也是对Http协议中请求行,请求头,实体内容的封装 public final class R ...

  6. struts2-环境搭建-访问流程-配置详解-常量配置-类详解

    1 struts2概述 1.1 概念  1.2 struts2使用优势 自动封装参数 参数校验 结果的处理(转发|重定向) 国际化 显示等待页面 表单的防止重复提交 struts2具有更加先进的架构以 ...

  7. Qt常用类——QWidget

    QWidget类是所有用户界面对象的基类. Widget是用户界面的基本单元:它从窗口系统接收鼠标,键盘和其他事件,并在屏幕上绘制自己. 每个Widget都是矩形的,它们按照Z-order进行排序.

  8. 详解 Qt 线程间共享数据(用信号槽方式)

    使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享 ...

  9. Java重要类详解之ArrayList类

    https://blog.csdn.net/shengmingqijiquan/article/details/52634640 一.ArrayList概述 ArrayList 是一个数组队列,相当于 ...

随机推荐

  1. [tyvj2054] 四叶草魔杖 (最小生成树 状压dp)

    传送门 Background 陶醉在彩虹光芒笼罩的美景之中,探险队员们不知不觉已经穿过了七色虹,到达了目的地,面前出现了一座城堡和小溪田园,城堡前的木牌上写着"Poetic Island&q ...

  2. join()与os.path.join()的用法

    join:连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 os.path.join():  将多个路径组合后返回 一.函数说明 1.join()函数 语法:‘ ...

  3. nyoj 803 大数问题

    #include<stdio.h> #include<string.h> #define ll long long #define N 110000 int main() { ...

  4. HTTP中的重定向和请求转发的区别(转)

    时间长有些忘了,转篇文章加深一下印象: 一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下:request.getRequestDispatcher("new.jsp&qu ...

  5. 小米2S电池电量用尽充电无法开机解决方法

    背景:        昨晚睡觉前关机,记得电量还有百分之七八十,但早上起床后,指示灯一直红灯闪烁.按开机键和其它键都没反应! ! 解决方法:         扣下电池,用万能充冲电,略微多冲一会,由于 ...

  6. 解决的方法:mysql_connect()不支持请检查mysql模块是否正确载入

    故障现象:linux 安装discuz 错误提示:mysql_connect() 不支持请检查mysql模块是否正确载入. 解决的方法:查看/usr/lib/php/modules/ (64位的看/u ...

  7. caioj1497&&bzoj3125: CITY

    震惊!bzoj居然又被苏大佬D飞了... 这题煞笔模板题好吧. 然而bzojAC caiojWA%40??? 好强啊 今天早上发现是m打成n了囧 #include<cstdio> #inc ...

  8. caffe训练CIFAR数据库

    CIFAR-10是一个用于普适物体识别的数据集.Cifar-10由60000张32*32的RGB彩色图片构成,50000张训练图片,10000张测试图片,分为10类.cifar下载地址: http:/ ...

  9. BZOJ 4028 分块

    zrt当年是怎么想到的--. 思路: 考虑把序列分块 对于每块 存xor[i] 表示从本块开头到i的前缀异或和 把它扔进set里 存gcd[i]表示从本块开头到i的前缀gcd. 如果这一块的GCD和整 ...

  10. 在centOS 6.5下手动安装nginx1.9.x版本

    第一步:首先安装Nginx的依赖环境    1.安装pcre-devel   yum -y install pcre-devel  #支持正则的pcre模块 比如安装 不然手动安装会报错    2.安 ...