QT 学习笔记概述(二)

一、QT与JS/HTML通信交互
前提:   提前连接QWebFrame的javaScriptWindwoObjectCleared信号时将自身对象添加到JS窗口对象中,也即是:QwebFrame::addToJavaScriptWindowObject(“someobj”,
this);   其中someobj便是JS中可调用的QT对象名称,即someobj指代传入的this对象;   其次,JS中可调用的someobj的对象的方法一定要是槽函数。 QT执行JS代码:QWebFrame::evaluateJaveScrit方法,参数为JS环境代码;返回值则为对应JS的最后执行的JS的表达式的值。此外QWbeElement元素对象也可以执行该函数,以执行JS表达式。 JS执行QT方法:someobj.somefunc,somefunc必为槽函数。 结构: QWebView |   |QWebPage |      |QWebFrame--(QWebFrames) QWebView为窗口类,其他均为数据类型类。 QWebPage代表一个网页。 QWebFrame主框架可含多个子框架。 QT嵌入JS/HTML/CSS可提高灵活性、UI界面定制等。 二、QT视图/模型架构 数据集 (数据)| |(编辑数据) | | 模型----------------(编辑数据)------| |(给数据) 委托 | | 视图------(渲染/给数据)------| 视图/模型架构之模型 表格模型(列表模型)、树模型 QT提供的模型: QObject QAbstractListModel QStringListModel QHelpIndexModel QAbstractProxyModel QSortFilterProxyModel QAbstractTableModel QSqlQueryModel QSqlTableModel QSqlRelationalTableModel QAbstractItemModel QDirModel QFileSystemModel QHelpContentModel QProxyModel QStandardItemModel 其中QStandardItemModel可作为列表、表格、树的通用模型,提供了基本的实现和功能(结合QStandardItem),当数据量多时可能会有性能问题,一般可继承QAbstractItemModel或其他对应的模型实现自定义的模型。 另外QT的便利控件,如QListWidget、QTreeWidget、QTableWidget继承于对应的QXXXView类,提供了内置的模型实现;另外还有QCombobox。 QAbstractProxyModel子类一般用来作为排序、过滤器等包装封装模型,以封装其他模型,也即是setSourceMode。 视图/模型架构之委托
  QT标准视图类,QListView、QTableView、QTreeView、QComboBox等为数据显示和编辑提供了一个QStyledItemDelegate。委托对象可对视图显示的外观进行完全控制。   
1.与数据类型相关的编辑器     使用QItemEditorFctory注册特定窗口部件作为特定的一个或几个类型的编辑器。   2.与数据类型相关的委托     为特定的行、列创建数据类型相关的委托。可以创建其他不同数据类的委托。一般内置的委托为QStyleItemDelegate。实现自定义列或行的委托,继承于QStyleItemDelegate,并实现相应的虚函数如paint等方法,并调用setItemDeleteForColumn或setItemDeleteForRow即可使用自定义的委托来替换内置的委托;实现重新绘制则重写paint,若支持重新实现编辑,则需要实现createEditor、setEditorData、setModeData等方法;paint方法中还可以绘制任意的元素以及包括复杂的控件或组合控件等。   3.与模型相关的委托     在与数据类型相关的委托基础上,同样继承实现QStyleItemDelegate子类,并根据需要的列判断实现paint的内容;调用setItemDelegate设置委托,而不是针对列或者行的委托;这样在createEditor中可依据不同列或者行来返回不同的编辑窗口对象,同样的其它的几个接口也需要对应处理相应的列或行的数据或行为。     与数据类型相关的基于列或者行的委托相比,后者更加通用,灵活,而前者将所有委托代码放在一起的完全、直接的控制模型的外观和编辑方式。     自定义委托是最为通用、最便捷的控制模型项的呈现和编辑的方式,若是想实现不同于QT的内置视图的方式来呈现数据项或自定义相互关联的项的外观时,就需要用到自定义的视图了。 视图/模型架构之视图
  QT中内置了标准视图:QListView、QTableView、QTreeView、QComboBox等。当然也可以继承这些视图子类化或者使用其自定义的委托来呈现模型的数据显示。不过当需要呈现的数据方式或者以某种方式把两项或多项数据组合起来显示则需要自定义的视图实现了。   创建自定义视图方式:   
1.子类化标准视图类或者继承QAbstractItemView的实现类(相对可以复用),一般情况下其数据项和显示项是一一对应的,视图基本上不需要自己去绘制(当然也可以增加其他的部分附加绘制信息)而是交给视图的委托,可以是视图内置的委托或者使用者设置的自定义委托来绘制这些数据项。   2.子类化QWidget并提供自己的API且包含setModel接口的实现类(一般难以复用,且可以实现不同的多个项的关联显示绘制,可能需要自己实现必要的整合工作)。   一般情况下,对于使用自定义的委托或者基于QAbstractItemView 的API实现的自定义视图无法满足要求时使用自定义视图是完全自由且灵活的。   一般时使用QStandardItemModel即可,或者子类化QStandardItemModel(或QStandardItem)使得数据可序列化和反序列化,如果需要也可使用自定义模型;同样的,使用QT内置的标准视图显示数据模型也是最佳的方式,若需要外观或对数据项进行编辑则最好最容易的方式是使用自定义委托,对于自定义委托和标准视图来绘制显示数据项时,可使用自定义视图的方式来呈现。 三、QT图形/视图窗口
一般时通过自定义QWidget派生子类,并实现paintEvent并使用QPainter可实现绘制任意内容,此对应自定义实现窗口部件比较容易,但是对于大量独立的项,则可能会影响性能和图形项的交互。 图形
/视图框架以QGraphicsView作为中心窗体,把其他用户界面的窗口部件作为图形项放在其中。相对视图/模型框架,前者使用QGraphicsScene(图形场景)来容纳项的数据类似的作为模型,QGraphicsView来可视化显示数据。图形场景包含了从抽象类QGraphicsItem派生而来的图形项,包括QT内置的预定义图形项以及自定义图形项甚至项也可以是场景。 坐标系统:   场景坐标系统:窗口的逻辑坐标;   视图坐标系统:视口的物理坐标; 项使用的坐标系统:以中心在(0,0)点的逻辑坐标(文本项使用的是左上角作为中心); 四、QT图形/视图场景 五、QT动画与状态机 六、其他
声音与视频   对于小文件或功能简单的可使用QSound、QMovie;   或者高级的功能强大的Phonon多媒体框架; QT5以后可使用QtMutimedia模块替代。 多线程与并发 富文本编辑器

猜你喜欢

转载自www.cnblogs.com/haomiao/p/11647017.html
今日推荐