• Qt Example各例子功能说明(二)


    说明:

    下面的XX.XX.XX为Qt的版本号,如:5.14.1。

    下面总结的都是以Qt的5.14.1版本来说明的,未来的版本也许和这有些不同。

    因为Qt自带的例子很多,本博文是第2部分,第1、3、4、5部分请参见如下链接:

    1.widgets\draganddrop

       本大节展示了Qt拖放技术的使用,如:QDrag、QMimeData等和拖放技术有关类的使用。

    1.1 dndpuzzle

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\draganddrop\dndpuzzle

           本工程通过将一个图片切分为25等份的小图片,随机将这25个小图片插入到左边的ListWidget中,然后按住鼠标拖放到右侧窗体进行拼接,如果拼接成和未切割图片一样,则本游戏就成功。通过本工程需要掌握:

    • QDrag、QMimeData类用法。
    • QDrag、QMimeData实现拖放。
    • 拖放时,对dragEnterEvent、dragLeaveEvent、dragMoveEvent、dropEvent、mousePressEvent事件的处理。
    • Qt::MoveAction、Qt::CopyAction枚举值的含义及exec用法。

    1.2 draggableicons 

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\draganddrop\draggableicons 

              本工程通过在两个窗体或单个窗体内部拖动带由图片的Label,演示了拖放技术。通过本工程需要掌握:

    • QDrag、QMimeData类用法。
    • QDrag、QMimeData实现拖放。
    • 拖放时,对dragEnterEvent、dragLeaveEvent、dragMoveEvent、dropEvent、mousePressEvent事件的处理。
    • Qt::MoveAction、Qt::CopyAction枚举值的含义及exec用法。
    • QDropEvent对象的acceptProposedAction的用法。
    • QWidget类判断鼠标拖动时拖动点下发窗体部件的childAt方法的使用。
    • QDropEvent的source()即拖动事件发送的源对象用法。

    1.3 draggabletext

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\draganddrop\draggabletext

              本工程读取txt文件中的所有文本,然后拆分读取到字符串,每个字符串都构建一个QLabel,对每个QLabel可以进行拖放。通过本工程需要掌握:

    • QDrag、QMimeData类用法。
    • QDrag、QMimeData实现拖放。
    • 拖放时,对dragEnterEvent、dragLeaveEvent、dragMoveEvent、dropEvent、mousePressEvent事件的处理。
    • Qt::MoveAction、Qt::CopyAction枚举值的含义及exec用法。
    • QDropEvent对象的acceptProposedAction的用法。
    • QWidget类的childAt方法的使用。
    • QWindow类devicePixelRatio函数用法。
    • QWidget类的render和QPixmap类,可以实现将QWidget渲染到QPixmap对象,类似窗体截图。

    1.4 fridgemagnets

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\draganddrop\fridgemagnets

          本工程类似draggabletext工程。读取txt文件中的所有文本,然后拆分读取到字符串,然后对每个字符串构建一个QImage对象,通过QImage再构建一个QPixmap,然后将字符串绘制到QPixmap,然后再将这个QPixmap设置到QLabel,对每个QLabel可以进行拖放。通过本工程需要掌握:

    • QDrag、QMimeData类用法。
    • QDrag、QMimeData实现拖放。
    • 拖放时,对dragEnterEvent、dragLeaveEvent、dragMoveEvent、dropEvent、mousePressEvent事件的处理。
    • Qt::MoveAction、Qt::CopyAction枚举值的含义及exec用法。
    • QDropEvent对象的acceptProposedAction的用法。
    • QWidget类的childAt方法的使用。

    1.5 dropsite

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\draganddrop\dropsite

          本工程实现将外部程序拖放到本程序,本程序对拖动到的外部程序的格式进行探测。通过本工程需要掌握以下知识点:

    • 拖放时,对dragEnterEvent、dragLeaveEvent、dragMoveEvent、dropEvent事件的处理。
    • QMimeData类的各种格式处理。
    • QDropEvent类的acceptProposedAction函数用法。

    2.widgets\itemviews

          本大节展示Qt模型、视图的相关技术点。要用到Qt的model/view framework框架。详细的内容请在Qt Assistant 的搜索页签中输入Model/View Programming进行查看,建议对model/view framework框架了解后再来研究本大节中的例子。

    2.1.addressbook

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\addressbook

           本工程实现地址簿功能。通过界面添加联系人的地址。通过QTableView类以表格视图展示这些联系人地址;通过QSortFilterProxyModel类对录入的联系人分类排序。通过本工程,需要掌握如下知识点:

    • 如何从QAbstractTableModel类派生符合自己需求的子类。
    • QModelIndex、QAbstractTableModel、QAbstractItemView即模型索引、模型、视图知识点。
    • QTableView类的使用。
    • 如何使用QSortFilterProxyModel类对模型过滤、排序。
    • 模型数据选择类QItemSelectionModel的使用。
    • QRegularExpression用法,并利用QRegularExpression和QSortFilterProxyModel一起对模型进行过滤、排序。

    2.2.basicsortfiltermodel

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\basicsortfiltermodel

           本工程实现QSortFilterProxyModel类模型分类排序。通过本工程,需要掌握如下知识点:

    • QStandardItemModel类的使用。
    • QTreeView类的使用,QTreeView的setAlternatingRowColors方法可以设置隔行颜色交替显示,这个函数的具体用法参见《Qt实现表格、列表、树控件颜色隔行交替显示》。
    • QTreeView类的rootIsDecorated的作用,其表示树控件的顶层项用以表示展开和收缩的小控件是否显示。如果只有一个层级的树结构,可以设置该属性为false,让它看起来更像简单的list结构。
    • QSortFilterProxyModel结合QRegExp对模型进行过滤显示。

    2.3.chart

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\chart

           本工程实现需要掌握如下知识点:

    • QTableView、QItemSelectionModel、QStandardItemModel用法。
    • 如何子类化QAbstractItemView类,对其虚函数的重写。

    2.4.coloreditorfactory

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\coloreditorfactory

           本工程实现在QTableWidget表格控件的单元格加入下拉列表框,用户可以在下拉列表框中选择自己需要的颜色。通过本需要掌握如下知识点:

    1. QItemEditorFactory、QItemEditorCreatorBase、QStandardItemEditorCreator类用法。
    2. 如何通过1条目中的3个类在表格控件的单元格插入自定义的可编辑窗体部件。
    3. Qt::DecorationRole用法及在QComboBox中的应用。
    4. Qt元系统机制中的Q_PROPERTY宏的用法。

    2.5.stardelegate

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\stardelegate

           本工程实现自定义QStyledItemDelegate,从而实现在QTableWidget表格控件的第4列绘制五角星(只读不可编辑状态时)或钻石(可编辑状态时)。通过本工程要掌握如下技术点:

    • 如何子类化QStyledItemDelegate,从而满足自己的业务需求。
    • QModelIndex类的使用。
    • QStyleOptionViewItem类的使用。

    2.6.customsortfiltermodel

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\customsortfiltermodel

    本工程实现需要掌握如下知识点:

    • 如何从QSortFilterProxyModel派生出自己的子类,以对模型按自定义规则过滤和排序。
    • 在子类化QSortFilterProxyModel时,filterAcceptsRow、lessThan、invalidateFilter的作用。
    • 如何从QLineEdit派生子类,以实现编辑框左边有个下拉菜单。

    2.7.combowidgetmapper

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\combowidgetmapper

    本工程实现需要掌握如下知识点:

    • QStringListModel模型类的用法,其可以用来表示QString的列表视图。
    • QStandardItemModel模型类的用法。
    • QDataWidgetMapper类将模型记录映射到窗体上。通过该类的相关函数直接将模型记录显示到映射好的窗体上,而不用直接操作模型。

    2.8.dirview

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\dirview

         本工程利用QFileSystemModel类将本机文件系统以模型的形式通过QTreeView展现,通过本工程需要掌握如下知识点:

    • QFileSystemModel类用法。
    • QFileSystemModel类的setRootPath函数和QTreeView类的setRootIndex函数的用法及区别,具体请参见

           《QFileSystemModel类显示根目录不起作用及setRootPath、setRootIndex函数的区别》。

    • 通过命令行QCommandLineParser、QCommandLineOption传参数从而改变QFileSystemModel::Option枚举参数。

    2.9.editabletreemodel

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\editabletreemodel

         本工程读取default.txt文件中的字符串,并通过模型视图框架,将字符串以QTreeView视图展示出来。通过本工程需要掌握如下知识点:

    • 如何从QAbstractItemModel子类化符合自己业务需求的模型。
    • 模型的删除、插入、编辑操作。
    • 模型通过QTreeView视图展示。

    2.10.fetchmore

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\fetchmore

        通过本工程需要掌握如下知识点:

    • 如何子类化QAbstractListModel。
    • QAbstractListModel和QAbstractItemModel的关系。
    • QLibraryInfo类的作用。
    • QLibraryInfo和qt.conf之间的关系,具体参见《QLibraryInfo、qt.conf用法及关系总结》博文。

    2.11.flattreeview

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\flattreeview。

    本工程构建一个QStandardItemModel对象,用QTreeView视图来展示。通过本工程需要掌握如下知识点:

    • QStandardItemModel用法。
    • QTreeView视图用法。
    • QTreeView视图和QStandardItemModel的交互。

    2.12.frozencolumn

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\frozencolumn。

    本工程将一个QTableView视图对象frozenTableView完全贴在、盖住另一个从QTableView派生出的对象(为了便于后文表述,暂且称为A)。为了完全盖住、遮罩主A对象,frozenTableView设置和A相同的数据模型、列数、滚动条属性、表头等属性。且frozenTableView只显示第1列,其它列都隐藏,其它列的数据由A展示出来,这样通过拖动A的水平滚动条时,frozenTableView就不会被拖动,即人眼的感觉是第1列始终不会随水平滚动条滚动,感觉就被冻结了一样。通过本工程需要掌握以下知识点:

    • QAbstractItemModel和QTableView数据绑定。
    • QTableView的表头视图QHeaderView的用法。如:设置表头隐藏、表头尺寸调整模式、尺寸大小改变信号、
    • 如何子类化QTableView,特别是scrollTo、moveCursor重载函数的理解。
    • 通过setHorizontalScrollMode设置QTableView滚动模式。
    • QWidget类的stackUnder函数用法。QFrame的frameWidth函数用法。

    2.13.interview

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\interview。

    该工程通过自定义QAbstractItemModel模型,将其用QTableView、QTreeView、QListView三个不同的视图显示,通过本工程需要掌握如下知识点:

    • 如何子类化QAbstractItemModel模型。
    • QTableView、QTreeView、QListView视图用法。
    • 对QTableView、QTreeView、QListView设置同一个QItemSelectionModel选择对象,实现只要在这三个视图中的某一个视图选中,从而实现另外两个视图相应项也选中,即实现三个视图的同步选中。
    • QFileIconProvider类提供常用图标。
    • Qt::WA_StaticContents标识符的用法,具体参见《Qt::WA_StaticContents标识作用》博文。

    2.14.pixelator

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\pixelator。

    该工程通过通过将提取QImage类对象指定行列下的像素,进而提取其灰度值,从而形成灰度图片,通过QTableView视图将图片的灰度图展示出来。通过本工程,需要掌握如下知识点:

    • 如何子类化QAbstractTableModel,从而派生出符合业务需求的子类,特别是要理解beginResetModel、endResetModel函数的作用。
    • 如何子类化QAbstractItemDelegate,从而自定义展示图片灰度图。
    • QTableView类用法。

    2.15.puzzle

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\puzzle。

    其和Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\draganddrop\dndpuzzle

    其实是同一个工程,只不过本节侧重展示视图框架的技术点,后者侧重展示拖放技术。

            本工程通过将一个图片切分为25等份的小图片,随机将这25个小图片插入到左边的ListWidget中,然后按住鼠标拖放到右侧窗体进行拼接,如果拼接成和未切割图片一样,则本游戏就成功。通过本工程需要掌握:

    • QDrag、QMimeData类用法。
    • QDrag、QMimeData实现拖放。
    • 拖放时,对dragEnterEvent、dragLeaveEvent、dragMoveEvent、dropEvent、mousePressEvent事件的处理。
    • Qt::MoveAction、Qt::CopyAction枚举值的含义及exec用法。
    • 如何从QAbstractListModel派生出自己相应的模型。
    • QListView视图用法。

    2.16.simpledommodel

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\simpledommodel。

    本工程通过将xml按层次关系解析到QTreeView进行展示。通过本工程需要掌握:

    • 如何子类化QAbstractItemModel的,以派生出符合自己业务的子类。
    • QTreeView类使用。
    • xml文件读写、解析。

    2.17.simpletreemodel

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\simpletreemodel

        通过本工程需要掌握如下知识点:

    • 如何从QAbstractItemModel派生出符合自己业务需求的子类。
    • QTreeView视图用法。

    2.18.simplewidgetmapper

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\simplewidgetmapper

    本工程和2.7节的combowidgetmapper工程类似,需要掌握如下知识点:

    • QStringListModel模型类的用法,其可以用来表示QString的列表视图。
    • QStandardItemModel模型类的用法。
    • QDataWidgetMapper类将模型记录映射到窗体上。通过该类的相关函数直接将模型记录显示到映射好的窗体上,而不用直接操作模型。

    2.19.spinboxdelegate

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\spinboxdelegate

    本工程通过从QStyledItemDelegate派生出子类,从而在QTableView的单元格上加入QSpinBox控件。通过本工程要掌握如下知识点:

    • 如何从QStyledItemDelegate派生子类,从而在视图上创建符合自己业务需求的子控件(本例指QSpinBox控件)。
    • QStandardItemModel、QTableView类用法及和QStyledItemDelegate类之间的关系、互动。

    2.20.spreadsheet

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\sspreadsheet

    本工程通过QTableWidget实现了一个类似Excel的程序。通过本工程需要掌握如下知识点:

    • QTableWidget类的setItemPrototype函数用法。
    • 如何从QItemDelegate派生出子类,以符合自己的业务需求。
    • 如何子类化QTableWidgetItem。
    • 如何对QTableWidget类对象的单元格设置背景色、字体。

    2.21.storageview

    该工程存放在Qt安装目录下的

    Examples\Qt-XX.XX.XX\widgets\itemviews\storageview

    本工程通过QAbstractTableModel模型和QStorageInfo类,将本机磁盘信息通过QTreeView视图展示出来。通过本工程需要掌握如下知识点:

    • 如何子类化QAbstractTableModel,以符合自己业务的模型。
    • QStorageInfo类获取本机磁盘信息,如:各个盘符文件类型、总字节量、剩余字节量、是否可读、是否有效等。
    • 项的Qt::TextAlignmentRole、Qt::CheckStateRole、Qt::DisplayRole、Qt::ToolTipRole、Qt::ItemIsUserCheckable角色及标志使用。
    • QLocale().formattedDataSize函数的使用。
    • Q_DISABLE_COPY宏的作用。

    由于Qt官方自带的例子很多,一下看不完,每看完一个例子,记录一个。未完,待续!

  • 相关阅读:
    使用paddleX体验
    html和css相关操作
    变量、运算符、表达式、输入与输出
    如何实现该图的遍历算法
    超标量处理器设计 姚永斌 第6章 指令解码 摘录
    智能文档处理黑科技,拥抱更高效的数字世界
    5、nerf++(pytorch)
    m基于matlab的BTS天线设计,带GUI界面
    Go Web——http标准库
    mysql5.7版本数据库主主同步
  • 原文地址:https://blog.csdn.net/danshiming/article/details/126516787