Jump to Navigation

Welcome!

  NullGet是使用Qt编写的,运行于多种平台的GUI界面的多线程多协议断点续传下载软件。  使用NullGet可以轻松下载网络的多种协议的数据流,加快下载速度,支持断点续传,目前支持的协议有:HTTP,HTTPS,FTP,MMS,RTSP。而且它能运行于当前大多数流行的操作系统,包括Windows,Linux,FreeBSD等。     下载NullGet

  NullFXP 是一个基于Qt 4 开发的SFTP/FTP 客户端软件。目前已经实现基本的多文件上下传功能。详细信息查看本站项目说明页面。     下载nullfxp

  我们的目标是打造一个开源的,跨平台的,多线程的,运行稳定的下载软件,另一个就是整理Qt库开发跨平台GUI应用程序的相关资料。欢迎各位朋友对本站开源项目提供意见及建议,欢迎有兴趣的朋友参与本站开源项目,请联系 drswinghead at gmail dot com

CLISP语言中的哈希表

  1. 概要

    hash表是一种非常重要的数据结构,用于存储键/值对.
    可方便的向hash表中加入条目,使用键值取得条目.
    根据运行效率的不同, CLISP中有三种hash表类型: 标准hash表,快速hash表和稳定hash表.
    它们的区别是:

    对于快速hash表,垃圾回收器会便利其中的哈希值无效,被错误的回收了(除非所有的key值都是即对象,如常量字符串,数字等).
    对稳定hash表,垃圾绝不会对其进行错误回收,因此key值可以是任何CLISP对象.
    使用的时候注意,一般对生命周期短的hash表可以考虑使用快速hash表.

  2. hash表操作函数
    1. make-hash-table 创建一个hash表

      (MAKE-HASH-TABLE &KEY :TEST :INITIAL-CONTENTS :SIZE

      :REHASH-SIZE :REHASH-THRESHOLD
      :WARN-IF-NEEDS-REHASH-AFTER-GC :WEAK)

CLISP语言中的字符串

CLISP中的字符串是一种特定类型的VECTOR,它的元素是字符。

  1. 字符串比较

    字符串的比较基于字符的比较。

    但是对于双重母音却与通常的自然规则不同,如:

    o < oe < z < ö

    字符串比较函数:

多文档界面

在一个主窗口中心区域提供多个文档界面的应用程序被称为多文档界面应用程序或者称为MDI应用程序,QT中一个MDI应用程序是利用Qworkspace类作为中心物件,每一个文档窗口作为Qworkspace子物件。
对于MDI程序来说提供了一个包含用来管理窗口和窗口序列的窗口菜单是非常方便的。活动窗口是用一个选中标志来识别。用户可以在”窗口菜单”中点击相关项目来激活任意窗口。
在这一部分,我们将要开发在图6.16中显示的MDI Editor应用程序来演示如何创建一个MDI应用程序及如何它的“窗口菜单”。
图6.16 MDI Editor 应用程序

这个应用程序包含两个类:MainWindow和 Editor.代码可以从CD中找到, 因为它的代码大部分与第一部分的Spreadsheet应用程序相同或相近,所以我们将只显示新的代码。

图 6.17. The MDI Editor application's menus

让我们从MainWindow类开始

可停靠物件和工具栏

可停靠物件是能停靠在QMainWindow边上或者悬浮为一个独立窗口的物件。QMainWindow提供四个可停靠物件区域:中央物件的上面,下面,左边,右边各一个。像Microsoft Visual Studio和Qt语言家等程序大量使用了可停靠物件以提供一个非常灵活的用户界面。在Qt中,可停靠物件是QDockWidget的实现。

图6.13 一个带有一个可停靠物件的QMainWindow

每个可停靠物件都有自己的标题栏,甚至在它们停靠住也一样。用户可以拖动可停靠物件的标题栏把它从一个停靠区域移动到另一个停靠区域。它们还能通过把可停靠窗口拖离所有停靠区域使它从一个区域脱离出来并成为一个悬浮起来成为一个独立的窗口。自由浮动的可停靠窗口总是在他们 主窗口的上面。用户可以点击物件标题栏上的关闭按钮来关闭一个QDockWidget。所有这些功能的组合可通过调用QDockWidget::setFeatures()来禁止。
在Qt的早期版本中,工具栏被当然可停靠物件对待,并与之共享相同的停靠区域。从Qt 4 开始,工具栏占据中央物件周围的它们自己的区域(如图6.14所示),并且它们还不能被脱离开。如果需要一个浮动的工具栏,我们可以简单的把它放到一个QDockWindow里面即可。

滚动区域

QScrollArea类提供了一个可滚动的视口和两个滚动条。如果我们想给一个物件添加滚动条,使用QscrollArea比使用我们的QscrollBars并自己实现滚动功能要简单的多。

图 6.11 QscrollArea的示例物件

使用QScrollArea的方法是以我们想添加滚动条的物件为参数调用setWidget()。QScrollArea会自动重置物件的父物件以让它成为该视口(通过QScrollArea::viewport()访问)的子物件,如果当前还不是的话。例如,如果我们希望在第5章中开发的IconEdit物件有一个滚动条,我们可以像下面这么写:

分隔条

QSplitter是一个可包含其他物件的物件。在分隔条中的物件被分隔手柄分开。用户可拖动手柄改变分隔条中的子物件的尺寸。分隔条经常被用作一种布局管理器的替代,以给用户更多的控制。
一个QSplitter的子物件被以它们被创建的顺序并排(或者一个在其他的下面)在一起放置,并在相邻的物件间有分隔手柄。下面是创建图6.7中的窗口的代码:

堆栈布局

QStackedLayout类布置一组物件或者“页”,并且在同一时刻仅显示其中一个,隐藏其他的。QStackedLayout本身不可见,它也不为用户的变换页操作提供内存方法。在图6.5中的小箭头和深灰色边框是Qt设计师提供的让设计时管理布局更容易些。为了方便,Qt还包括QStackedWidget,它提供了一个带有内建QStackedLayout的QWidget。
图6.5 QStackedLayout

页序号是从0开始计的。要使一个指定的子物件可见,我们可以用一个页序号为参数调用setCurrentIndex()。一个子物件的的页序号可使用indexOf()获得。
图6.6中的选项对话框是一个使用了QStackedLayout的例子。该对话框由左边的QListWidget和右边的QStackedLayout组成。在QlistWidget中的每一项对应于QStackedLayout中的不同页。下面是该对话框的构造函数相关代码:

布局窗体上的物件

有三种管理窗体上的子物件的布局的方法:绝对位置,手工布局和布局管理器。我们将依次看看每种方法,使用图6.1中的“Find File “对话框作为例子。
图6.1 文件查找对话框

绝对位置法是布置物件的最让人讨厌的。它通过硬编码窗体上子物件的尺寸和位置以及固定尺寸的窗体。在上面是使用了绝对位置法的FindFileDialog构造函数:

第 6 章 布局管理

  • 布局窗体上的物件
  • 堆栈布局
  • 分隔条
  • 滚动区域
  • 停靠物件和工具栏
  • 多文档界面
  • 每个放在窗体上的物件都必须给它一个合适的尺寸和位置。Qt提供了几个布置窗体上的物件的类:QHBoxLayout, QVBoxLayout, QGridLayout, 和 QstackLayout。这些类是如此简单以至于几乎每个Qt开发人员都使用它们,或者直接在源代码中使用或者通过Qt设计师。
    另一个使用Qt的布局系统的原因是它们能保证窗体自动适应不同的字体,语言和平台。如果用户改变了系统的字体设置,程序的窗体将会立即响应,如果有必要的话调整他们的尺寸。
    其他能执行布局管理的类包括QSplitter, QScrollArea, QMainWindow, 和 QWorkspace。这些类莫须有的特点是他们都提供了能让用户控制的简单布局。例如,Qsplitter提供了一个能让用户拖动物件的尺寸的分隔条,Qworkspace提供了对MDI(多文档界面)的支持,意思是在一个程序的主窗口能同时显示许多的文档窗口。因为它们经常用于替代来合适的布局类,它们将在本章详细阐述

    CLISP语言中的数组

    1. 数组中可用的数据类型,array-element-type

      (unsigned-byte 2) (unsigned-byte 4) (unsigned-byte 8) (unsigned-byte 16) (unsigned-byte 32)
      bit charactor nil

    2. 构造数组

      make-array 函数。构造一个新的数组,构造时可指定数组的维数,数据类型,初始化值。
      adjust-array 函数。调整一个已有的数组,修改数组的维数,数据类型,值。

    页面

    订阅 www.qtchina.tk RSS


    Main menu 2

    by Dr. Radut