(1)关于screen驱动显示 screen驱动会根据一个和显示区域有交叠的所有顶层的窗口列表,来确认更新显示的内存。每个顶层窗口都有一个QWSWindowSurface类来表示其绘制区域,screendriver根据这些类对象来获取相应的内存块指针。最后,screen驱动会对这些内存块进行合成,并将更新的显示区域提交到framebuffer显示出来。 Qt提供的显示驱动主要有: Linux framebuffer:直接在linux系统的framebuffer上进行显示相关操作。 the virtual framebuffer:通过qvfb程序模拟出虚拟的framebuffer设备,在其中进行显示相关操作。 transformed screens:和屏幕旋转相关的操作。 VNC servers:服务端会启动一个小型的vnc服务,网络上的其它机器通过vnc方式访问其内容,服务端通过vnc进行显示。 multi screens:同时支持多种显示驱动的驱动。 需在编译QTE时,配置好需要使用的驱动。
(2)Model role model中的项可以作为各种角色来使用,这意味着在不同的环境下,Model会提供不同的数据(给View或Delegate)。例如Qt::DisplayRole用于访问一个字符串,设置此角色后,数据项会作为文本在view中显示。标准的角色在Qt::ItemDataRole中定义。我们可以通过指定model index与角色来获取我们需要的数据。 一个通过Model Index 和role访问Model项的例子: QDirModel *model = new QDirModel; QModelIndex parentIndex = model->index(QDir::currentPath()); int numRows = model->rowCount(parentIndex);//获取model的尺寸 for (int row = 0; row < numRows; ++row) { QModelIndex index = model->index(row, 0, parentIndex);//树形目录结构需要row和parentIndex信息定位特定数据项 tring text = model->data(index, Qt::DisplayRole).toString();//指定role为Qt::DisplayRole,可获取相应字符串数据。 // Display the text in a widget. }
(3)自己设计Model的例子: 假设我们实现一个自己的model, 用来显示字符串列表。 类声明如下: class MyStringListModel : public QAbstractListModel { Q_OBJECT
public: MyStringListModel(const QStringList &strings, QObject *parent = 0): QAbstractListModel(parent), stringList(strings) {} int rowCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; Qt::ItemFlags flags(const QModelIndex &index) const; bool setData(const QModelIndex &index,const QVariant &value, int role);