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层次的特定设置。
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层次的特定设置。