《C++.GUI.Programming.with.Qt.4》读书笔记Chapter 4~5

  Chapter 4 Implementing Application Functionality

Section 1 The Central Widget

    QMainWindow的中央区域可以被任何类型的widget占据。

Section 2 Subclassing QTableWidget

    QTableWidget会自动创建QTableWidgetItem来存储用户的输入。

    QTableWidgetItem类并不是widget,而是一个纯粹的data class。

    QTabeWidget::setItermProtype()可以设置在有用户输入的情况下自动创建哪种cllass。

Section 3 Loading and Saving

    QFile & QDataStream

    QFile的析构函数负责将打开的文件关闭。

    QDataStream类具有很强的通用性,可作用于QFile,QBuffer,QProcess,QTcpSocket,QUdpSocket。

    Qt还提供了一个QTextStream类用于专门读写文本文件。

Section 4 Implementing the Edit Menu

Section 5 Implementing the Other Menus

Section 6 Subclassing QTableWidgetItem

    每个QTablWidgetIterm中可存储若干数据,这是通过为每个role提供一个QVariant来实现的。常用的role有Qt:EditRole和Qt:DiaplayRole。

    QVarinant可以存放多种类型的变量值,并提供向其他类型转换的接口函数。

    使用默认构造函数创建的QVariant对象被视为invalid variant。



Chapter 5. Creating Custom Widgets

    Custom widgets can be created by subclassing an existing Qt widget or by subclassing QWidget directly。

Section 1 Customizing Qt Widgets

Section 2 Subclassing QWidget

    通过对QWidget进行派生,并重新编写其部分event handler来进行绘图和响应用户操作,程序员可以实现对widget的外观和行为的完全控制。

    Qt的内置Widget,如QLabel,QPushButton,QTabelWidget等,就是以这种方式实现的。

    宏Q_PROPERTY()用来为widget声明和添加自定义属性。

    每个属性的定义都对应一个数据类型(可以是任何被QVarinat支持的类型),一个read function以及可选的write function。

    对于包含自定义属性的类,Q_OBJECT和Q_PROPERTY()这两个宏都是必备的。

    QImage类以一种硬件无关的方式存储图像信息。

    Qt中提供了两个类型用于存储色彩信息:QRgb和QColor。
    QRgb其实是一个typedef,用于存放32-bit的像素信息。
    QColor则是一个提供了许多接口函数的类,在Qt中广泛的用于存储色彩。

    QWidget::update()函数用于对widget进行强制性的重绘。
    QWidget::updateGeometry()用于告知包含该widget的layout,该widget的size hint已发生变化,layout会自动进行调整。

    通过调用QWidget::update()和QWidget::repaing(),可以强制性的产生一个 paint event,两者的却别在于repaint()导致立即重绘,而update()只是将一个paint event放入event queue中。

    如果对update()进行连续多次调用,Qt会将连续的paint event压缩合并为一个paint event,以防止图像抖动。

    每个widget都拥有一个palette,用于确定widget中在什么情况下使用什么色彩,如背景色,文本色等。

    widget的palette由三个color group组成:active ,inactive ,disabled。

    QWidget::palette()以QPalette的形式返回widget的palette,而clolor group则通过枚举类型QPalette::ColorGroup指定。

   
Section 3 . Intergrating  Custom Widgets with Qt Designer

    要像在Qt Designer中使用自定义widget的话,必须要让Qt Designer能够了解到它们的存在。

    有两种机制:promotion approach &plugin approach

    promotion approach 很容易也很省时,但缺点是自定义widget的自定义属性在Qt Designer中是不可见和不可访问的,而使用plugin approach时则不存在这些问题。

    plugin approach要求创建一个Qt Designer 可以在运行时加载的plugin library,以用于创建widget的实例。由于Qt的MOC机制,Qt Designer可以动态获取widget的property list。

    要使用plugin approach ,首先要对QDesignCustomWidgetInterface进行派生,并重写某些虚函数。

    Q_INTERFACES()宏用于告知Qt该类实现了哪个interface。

    在实现plugin class的源文件尾部,必须使用Q_EXPORT_PLUGIN2()宏使得该plugin对Qt Designer可见、可用。该宏的第一个参数是plugin的名字,第二个参数是实现该plugin的class name。


Section 4 Double Buffering

    QWidget::style()返回用于绘制该widget时所使用的style。Qt中的style都是QStyle的派生类。同一应用程序中widget一般都采用同意style,然而可以调用QWidget::setStyle()来进行widget层次的特定设置。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值