分类: LINUX
2008-04-07 16:41:13
窗口部件是用户界面的一个原子:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。
每一个窗口部件构造函数接受两个或三个标准参数:
你自己将需要为你的窗口部件提供内容,但是这里是一些简要的运行事件,从最普通的开始:
如果你的窗口部件仅仅包含子窗口部件,你也许不需要实现任何一个事件处理器。如果你想检测在子窗口部件中的鼠标点击,请在父窗口部件的()中调用子窗口部件的()函数。
接收键盘的窗口部件需要重新实现一些更多的事件处理器:(详见 )
QTime类提供了时钟时间功能。
QTime对象包含时钟时间,比如从午夜开始的时、分、秒和毫秒数。它可以从系统时钟中读取当前的时间并且度量时间的跨度。它提供比较时间和操作时间的函数,比如加上一定的秒或毫秒。
QTime操作的是24小时时钟格式,它没有AM/PM概念。它操作的是本地时间,它不知道有关时区或白天时间的概念。
QTime对象通常可以由明白地给定的时、分、秒和毫秒数字来创建,或者使用静态函数currentTime()让QTime对象包含系统时钟时间。注意精确性取决于下面操作系统的精确性,不是所有的操作系统都有毫秒级精确度的。
()、()、()和()函数提供了对时、分、秒和毫秒数字的访问。()提供了文本格式的相同信息。
一个给定时间之后给定的秒或毫秒数的时间可以使用()或()得到。相对地,两个时间的秒(或毫秒)数可以使用()或()得到。
QTime可以使用()、()和()函数度量流逝的时间。
返回当前时间,来自于系统时钟。
QTimer类提供了定时器信号和单触发定时器。
它在内部使用来提供更通用的定时器。QTimer很容易使用:创建一个QTimer,使用()来开始并且把它的()连接到适当的槽。当这段时间过去了,它将会发射timeout()信号。
注意当QTimer的父对象被销毁时,它也会被自动销毁。
实例:
QTimer *timer = new QTimer( myObject ); ( timer, SIGNAL(()), myObject, SLOT(timerDone()) ); timer->( 2000, TRUE ); // 2秒单触发定时器
你也可以使用静态的()函数来创建单触发定时器。
作为一个特殊情况,一旦窗口系统事件队列中的所有事件都已经被处理完,一个定时为0的QTimer就会到时间了。
这也可以用来当提供迅速的用户界面时来做比较繁重的工作。
QTimer *t = new QTimer( myObject ); ( t, SIGNAL(()), SLOT(processOneThing()) ); t->( 0, FALSE );
myObject->processOneThing()将会被重复调用并且应该很快返回(通常在处理一个数据项之后),这样Qt可以把事件传送给窗口部件并且一旦它完成这个工作就停止这个定时器。这是在图形用户界面应用程序中实现繁重的工作的一个典型方法,现在多线程可以在越来越多的平台上使用,并且我们希望无效事件最终被线程替代。
注意QTimer的精确度依赖于底下的操作系统和硬件。绝大多数平台支持20毫秒的精确度,一些平台可以提供更高的。如果Qt不能传送定时器触发所要求的数量,它将会默默地抛弃一些。
另一个使用QTimer的方法是为你的对象调用()和在你的类中(当然必须继承)重新实现()事件处理器。缺点是()不支持像单触发定时器或信号那样的高级水平。
一些操作系统限制可能用到的定时器的数量,Qt会尽力在限制范围内工作。
QButton类是按钮窗口部件的抽象基类,提供了按钮所共有的功能。
如果你想创建一个按钮,请使用。
QButton类实现了一个抽象按钮,并且让它的子类来指定如何回复用户的行为和如何画按钮。
QButton提供了推动和切换按钮。和类只提供了切换按钮,QPushButton和提供了切换按钮和推动按钮。
任何按钮都可以有一个文本的或者像素映射的标签。()设置按钮为一个文本按钮并且()设置它为一个像素映射按钮。文本/像素映射的使用中需要创建当按钮被取消使用时所需的“失效的”外观。
QButton提供了按钮所要用到的绝大多数状态:
isDown()和isOn()的不同点如下:当用户点击一个切换按钮并且把它切换为开,按钮首先被按下并且然后被释放变为开状态。当用户再次点击(切换为关),按钮首先移动到被按下状态,然后变为关状态(isOn()和isDown()都为假)。
默认按钮(在很多对话框中被使用的)由()和()提供。
QButton提供五个信号:
如果一个文本按钮的文本中有“&”,QButton会创建一个自动快捷键。下面的代码创建一个标签为“Rock & Roll”(c下面有下划线)的推动按钮。这个按钮有一个自动快捷键,Alt+C:
*p = new ( "Ro&ck && Roll", this );
在这个实例中,当用户按下Alt+C时,按钮将会调用animateClick()。
你也可以使用()函数来设置一个定制的快捷键。这个对于绝大多数像素映射按钮是很有用的,因为它们没有自动快捷键。
*p; p->( QPixmap("print.png") ); p->( ALT+Key_F7 );
Qt所提供的所有按钮(、、和)都能够既显示文本也显示像素映射。
为了继承QButton,你至少不得不重新实现()(绘制按钮的外形)和()(绘制它的文本或像素映射)。通常也被建议重新实现(),并且有时也被建议重新实现()(为了决定一个按钮按下是否在按钮内)。
为了减少闪烁,()设置drawButton()中所要画的一个像素映射。你不用在QButton的子类中重新实现(),除非你想接管全部的绘制工作。