Qt Example各例子技术点说明(二)

本文介绍Qt中模型视图框架的应用实例,包括地址簿、图表展示、颜色编辑器工厂等,并深入探讨拖放技术,如拼图游戏、图标拖拽等。

说明:

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

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

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

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宏的作用。具体参见如下博文:

Q_DISABLE_COPY、Q_DISABLE_MOVE、Q_DISABLE_COPY_MOVE用法详解及总结

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

<think>好的,我现在需要处理用户的问题,关于Qt例子中出现的错误信息:“this example requires qt to be configured with -opengl desktop”。用户希望了解如何解决这个问题,或者得到相关的介绍。首先,我需要确定这个错误的原因,以及解决方法。 首先,我应该回忆一下Qt的OpenGL支持情况。Qt在渲染图形时,可以使用不同的后端,比如OpenGL或Raster(软件渲染)。某些Qt例子或应用程序可能依赖特定的OpenGL功能,尤其是桌面版的OpenGL,而不是OpenGL ES,这通常在嵌入式或移动设备上使用。错误信息提示需要配置Qt时启用桌面版的OpenGL支持,这可能是因为当前的Qt构建使用的是OpenGL ES或者其他不兼容的后端。 接下来,用户可能在尝试编译或运行某个Qt示例时遇到了这个错误。常见的情况是,用户可能在Linux系统下,或者在某些配置不包含桌面OpenGL的环境中使用Qt。例如,某些Linux发行版的Qt包可能默认使用OpenGL ES,或者用户在配置Qt时没有启用桌面OpenGL。 那么,解决方法应该是重新配置Qt并加上-opengl desktop选项,然后重新构建Qt。但需要注意,Qt从5.5版本以后,配置选项有所变化。-opengl选项可能在较新的版本中不再有效,而是需要通过其他方式指定OpenGL的实现。例如,在较新的Qt版本中,可能需要使用-qt-opengl desktop或其他参数,或者可能需要确保系统安装了正确的OpenGL开发包。 这时候需要分情况讨论。如果用户使用的是Qt 5.5或更早版本,可能确实可以通过在configure时添加-opengl desktop来解决。但如果是较新的版本,可能需要不同的步骤,比如安装mesa的OpenGL开发库,或者在配置时选择适当的选项。 另外,还需要考虑用户的操作系统。例如,在Windows上,OpenGL的支持可能依赖于安装的显卡驱动和SDK;而在Linux上,可能需要安装mesa-common-dev或类似的软件包。在macOS上,通常Qt会使用系统自带的OpenGL,但可能需要确认Xcode命令行工具是否安装。 此外,用户可能需要确保他们的系统支持桌面版OpenGL。例如,某些嵌入式系统或服务器环境可能没有安装相应的图形驱动,导致无法使用桌面OpenGL。 可能还需要检查Qt的构建配置是否正确。用户可能从源码构建Qt,或者在安装预编译的Qt包时选择了不包含OpenGL desktop支持的版本。例如,在Linux上,使用apt-get安装的Qt可能默认不带OpenGL桌面支持,需要从源码编译并配置相应的选项。 另外,可能的替代方案是,如果用户无法重新配置Qt,可以尝试修改示例代码的渲染后端,但这可能比较复杂,特别是对于不熟悉Qt内部机制的用户来说,重新配置Qt可能是更直接的解决方案。 总结处理步骤应该是: 1. 确认Qt版本,检查对应的配置选项是否需要-opengl desktop或其他参数。 2. 确保系统已安装所需的OpenGL开发库。 3. 重新配置Qt并启用桌面OpenGL支持,然后重新构建Qt。 4. 重新编译和运行示例程序,验证问题是否解决。 还需要注意可能的常见错误,例如配置参数的位置是否正确,构建环境是否干净,是否有旧的Qt构建残留导致问题,以及权限问题等。 可能用户没有从源码构建Qt的经验,因此需要详细说明如何下载Qt源码,运行configure命令,并执行后续的构建步骤。同时,提醒用户这个过程可能需要较长时间,并且需要安装必要的依赖库。 另外,如果用户不需要修改Qt的配置,是否有其他方法绕过这个问题?例如,使用软件渲染或其他渲染后端,但某些示例可能硬性依赖OpenGL功能,无法绕过。 最后,需要验证这些步骤的正确性,确保给出的建议适用于大多数情况,特别是用户可能使用的不同操作系统和Qt版本。</think>当遇到Qt示例提示`this example requires qt to be configured with -opengl desktop`时,通常是因为当前Qt库未启用桌面版OpenGL支持。以下是详细解决方法: --- ### **问题原因** 1. **Qt的OpenGL后端配置不匹配** 部分Qt图形示例(如OpenGL相关示例)依赖**桌面版OpenGL**(Desktop OpenGL),而非嵌入式版本(OpenGL ES)。 2. **Qt构建时未启用桌面OpenGL** 若Qt在编译时未通过`-opengl desktop`配置,可能导致相关功能缺失。 --- ### **解决方法** #### **步骤1:确认Qt版本与系统环境** - **Qt版本**:低于5.5的版本需显式配置`-opengl desktop`;5.5及更高版本可能需其他方式(见下文)。 - **操作系统依赖**: - **Linux**:安装OpenGL开发库(如Mesa): ```bash sudo apt-get install mesa-common-dev libgl1-mesa-dev ``` - **Windows/macOS**:确保显卡驱动支持OpenGL,并安装对应SDK(如Windows的[OpenGL SDK](https://www.opengl.org/))。 --- #### **步骤2:重新配置并编译Qt** 1. **下载Qt源码** 从[Qt官方下载页](https://download.qt.io/)获取对应版本源码。 2. **配置时启用桌面OpenGL** 在终端中运行以下命令(以Qt 5.5为例): ```bash ./configure -opengl desktop ``` - **新版本Qt(5.15+)**:改用`-qt-libpng`等参数,或确保系统OpenGL库已正确链接: ```bash ./configure -system-opengl ``` 3. **编译并安装Qt** ```bash make -j4 # 根据CPU核心数调整并行编译数(如-j8) sudo make install ``` --- #### **步骤3:验证配置** 1. **检查Qt的OpenGL支持** 运行Qt示例前,通过以下代码片段验证OpenGL类型: ```cpp #include <QOpenGLContext> QOpenGLContext ctx; ctx.create(); qDebug() << "OpenGL Type:" << ctx.isOpenGLES() ? "OpenGL ES" : "Desktop OpenGL"; ``` 2. **重新编译示例** 清理旧构建并重新编译: ```bash make clean && qmake && make ``` --- ### **常见问题** 1. **错误:`Could not create OpenGL context`** - 系统缺少OpenGL驱动,更新显卡驱动或安装`mesa-utils`(Linux)。 - 虚拟机用户需启用3D加速(如VirtualBox中勾选“启用3D加速”)。 2. **Qt预编译包问题** 某些预编译Qt包(如Linux发行版仓库中的版本)可能默认禁用OpenGL桌面支持。建议从源码编译。 --- ### **替代方案** 若无法重新编译Qt,可尝试: 1. **强制使用软件渲染**(仅限部分场景): ```bash export QT_XCB_FORCE_SOFTWARE_OPENGL=1 ``` 2. **修改示例代码**:将`QSurfaceFormat::setRenderableType(QSurfaceFormat::OpenGL)`替换为兼容类型(需熟悉Qt图形模块)。 --- 通过以上步骤,您应能解决因OpenGL配置导致的Qt示例运行问题。如仍报错,请检查系统日志或Qt的编译日志以获取详细信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值