PyQt(Python+Qt)学习随笔:视图中的dragDropMode属性对dragEnabled和acceptDrops属性的影响

PyQt中的QAbstractItemView的dragDropMode属性 然后,我们将模型设置为QTreeView的模型,并使用setDragDropMode方法将dragDropMode属性设置为QAbstractItemView.DragDrop,从而启用拖放操作。dragDropMode属性是PyQt中QAbstractItemView的一个重要属性,它决定了控件的拖放行为。通过设置不同的dragDropMode值,我们可以控制项目的拖动和接收拖放的行为。其中一个重要的属性是dragDropMode,它决定了QAbstractItemView的拖放行为。 阅读详情

在《PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系》介绍了视图中dragDropMode属性对dragEnabled属性的影响,实际上除了dragDropMode属性对dragEnabled属性有影响之外,对acceptDrops属性也有类似的影响。

经老猿验证测试如下场景:

  • 当dragDropMode设置为DragOnly、DragDrop、InternalMove时,会自动将视图dragEnabled设置为True
  • 当dragDropMode设置为DropOnly、NoDragDrop时,会自动将dragEnabled设置为False
  • 当修改dragEnabled值时,对dragDropMode属性没有影响,但是需要视图支持拖拽,这两个属性都必须支持拖拽,如果一个不支持,则视图无法拖拽
  • 当dragDropMode设置为DropOnly、DragDrop、InternalMove时,会自动将视图的acceptDrops属性、以及视图视口的acceptDrops设置为True
  • 当dragDropMode设置为DragOnly、NoDragDrop时,会自动将视图的acceptDrops属性、以及视图视口的acceptDrops设置为False
  • 当视图的acceptDrops设置为False时,视图视口的acceptDrops同时设置为设置为False,dragDropMode属性如果支持放下,则会将放下去除,如dragDropMode原来为DragDrop,则变为了DragOnly,运行时视图内不能拖放
  • 当视图的acceptDrops设置为True时,视图视口的acceptDrops同时设置为设置为True,dragDropMode属性如果不支持放下,则会改为支持放下,如dragDropMode原来为DragOnly,则变为了DragDrop,运行时视图内可以拖放
  • 当视图对应视口的acceptDrops设置为False时,视图的acceptDrops属性和dragDropMode属性保持不变,但视图中的拖拽数据只能拖动无法放下
  • 当视图对应视口的acceptDrops设置为True时,视图的acceptDrops属性和dragDropMode属性保持不变,但不论视图原来相关属性是否支持拖拽数据放下,视图中的拖拽数据都能放下

从上述场景综合来看,视图中的dragDropMode、dragEnabled和acceptDrops属性相互关系如下:

  • 视图中的dragDropMode属性、acceptDrops属性 相互之间都会互相影响,最终效果受这些属性设置语句的执行先后影响,后执行的影响先执行
  • 视图中的dragDropMode属性 对dragEnabled是单向影响,即dragDropMode设置值时会根据情况改变dragEnabled的值,但反过来不行,不过最终是否允许拖拽需要这两个属性都支持拖拽才行
  • 视图对应视口的acceptDrops属性值改变不会影响视图的dragDropMode、和acceptDrops属性,但视图中如果要支持拖放,需要这三个属性都支持拖放才可

关于视图视口,实际上就是视图中数据可见部分的窗体,所有需要展示的数据都需要滚动到视口才可见。可以通过视图的viewport()方法访问。关于视口更多的说明请参考《PyQt(Python+Qt)学习随笔:QAbstractScrollArea的viewPort(视口)理解》

老猿Python,跟老猿学Python!
PyQt视图中的dragDropMode属性对dragEnabled和acceptDrops属性的影响 然后,我们分别调用setDragEnabled和setAcceptDrops方法,将dragEnabled和acceptDrops属性都设置为True,以使视图既可以作为拖动源项,又可以接受拖放操作的目标项。如果dragEnabled为True且acceptDrops为True,则视图中的项既可以作为拖动源项,也可以接受拖放操作的目标项。如果dragEnabled为False或acceptDrops为False,则视图中的项既不能作为拖动源项,也不能接受拖放操作的目标项。 阅读详情

相关推荐

QAbstractItemView的dragEnabled和dragDropMode属性的关系及Python实现

例如,当dragEnabled为False,但dragDropMode为DragDrop时,仍然可以使用鼠标拖动控件中的项。其中,dragEnabled和dragDropMode是两个重要的属性,用来控制该控件是否支持拖放操作以及拖放时的行为。本文介绍了QAbstractItemView的dragEnabled和dragDropMode属性的关系,并提供了Python实现的示例代码。如果你希望控件支持拖动和拖放,可以将dragEnabled和dragDropMode属性均设为True。

持续更新 306

PyQt(Python+Qt)学习随笔: QAbstractItemView的dragDropMode属性

老猿Python博文目录 老猿Python博客地址 一、概述 dragDropMode属性用于控制视图拖放事件的处理方式,其类型为枚举类型DragDropMode。 二、枚举类型DragDropMode取值及含义 三、访问方法 dragDropMode():读取属性值,返回值为bool类型 setDragDropMode(DragDropMode behavior):设置属性 老猿...

老猿Python 2405

PyQt中的QAbstractItemView的dragEnabled和dragDropMode属性的关系

其中,dragEnabled和dragDropMode是两个相关的属性,用于控制拖放功能的启用和模式设置。在上述代码中,我们创建了一个包含5个项目的QStandardItemModel数据模型,并将其设置为树形视图(QTreeView)的模型。,我们将拖放模式设置为DragDrop,允许用户既能拖动项目,又能将项目放置到视图中。DropOnly:该模式下,用户可以将项目放置到视图中,但是不能拖动项目。DragDrop:该模式下,用户既可以拖动项目,也可以将项目放置到视图中。

James_CODER的博客 236

QTreeWidget拖拽项目

拖放操作

weixin_43956958的博客 1922

LaTeX伪代码字体大小调整全攻略:从algorithm到algorithm2e的实战技巧

本文详细介绍了在LaTeX中调整伪代码字体大小的全面技巧,涵盖algorithm、algorithmicx和algorithm2e等主流算法包的使用方法。从基础命令到高级配置,帮助用户解决学术论文和技术文档中的伪代码排版问题,提升算法展示的专业性和可读性。特别针对不同期刊格式要求,提供了实用的字体调整方案。

weixin_29297127的博客 437

保姆级教程:在PyCharm里用Continue插件一键接入DeepSeek API(含乱码修复)

本文详细介绍了如何在PyCharm中通过Continue插件无缝集成DeepSeek API,提供从环境准备到高级配置的全流程指南,包括解决常见的乱码问题。通过本教程,开发者可以轻松实现AI编程助手的高效调用,提升代码编写和调试效率。

weixin_30275415的博客 850

QT QTableWidget整行拖放移动位置

QTableWidget整行拖放移动位置1.先看效果2.代码2.1 核心(继承QTableWidget重写drop事件)2.2 完整代码2.3 提升控件3.参考链接 1.先看效果 2.代码 2.1 核心(继承QTableWidget重写drop事件) // 拖拽设置 this->setDragDropMode(QAbstractItemView::InternalMove); // 内部移动 this->setDropIndicatorShown(true); //

做减求空 8337

用友U8其中一个账套提示演示期已到期-修复方法

【事件始末】 一朋友求助,反馈使用的用友U8,很多年了! 突然发现其中账套2021年的一个账套打不开,提示演示期限已到期! 但是其他账套完全正常,可以打开,没有任何问题。 不管是还原老旧备份,还是重装软件问题依旧,无法自己解决。 客户查询报表结算账期,情况比较紧急,于是求助我们。 经过多次反复琢磨和烟酒,终于于晚上23点59分给弄了出来,也总是圆满解决问题了。 【问题分析】 该用户打的是 U82X免狗补丁,估计是该补丁文件设置了 最大有效期,补丁到期了导致的。 也有可能是程序...

u010431289的博客 2万+

自定义QListWidget控件和拖放事件

【代码】自定义QListWidget控件和拖放事件。

qq_65932616的博客 1080

Allegro 16.6 高级技巧实战:用Region规则和动态间距搞定高密度连接器布局布线

本文深入探讨了Allegro 16.6在高密度连接器布局布线中的高级技巧,重点介绍了Region规则和动态间距属性的应用。通过局部规则覆盖和分层控制,解决0.5mm以下引脚间距的布线难题,提升PCB设计效率和质量。

weixin_30352645的博客 440

光伏发电系统模拟及其发电预测开源python工具pvlib

本文介绍光伏发电系统模拟及其发电预测开源python工具pvlib,以及举例介绍获取辐照度方法、光伏发电预测思路。

肖永威的专栏 1万+

Qt中自定义QTreeWidget实现节点拖拽复制功能

Qt中自定义QTreeWidget实现节点拖拽复制功能

m0_60259116的博客 2889

STM32H7系列QSPI内存映射模式与MPU配置冲突分析

本文分析了STM32H7系列QSPI内存映射模式与MPU配置冲突导致系统卡死的问题。通过解析内存保护管理单元机制,提供了MPU配置调整方案,包括禁用MPU或精细配置QSPI区域权限,确保内存映射模式正常访问外部Flash,避免HardFault错误。

js777的博客 740

Qt图形视图框架:QGraphicsView 详解

Qt图形视图框架:QGraphicsView详解

友善啊,朋友的博客 7万+

华为OD机考 新系统真题 【区分奇偶的数组排序】

华为OD机试 新系统真题【区分奇偶的数组排序】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【区分奇偶的数组排序】多语言题解。

qq_45776114的博客 511

FPGA SoC 的 RISC-V 固件开发全攻略(三):RISC-V MCU 启动流程深入解析

本文是《FPGA SoC 的 RISC-V 固件开发全攻略》专栏第 3 篇。上一篇:第 2 篇《开发环境搭建与工具链避坑》 | 下一篇:第 4 篇《RISC-V 与 ARM Cortex-M 开发差异对比》

XavierKong的博客 44

Qt拖拽组件与键盘事件

1.设置widget或view的拖拽和放置模式函数setDragDropMode参数说明,NoDragDrop(无拖拽和放置)、DragOnly(只允许拖拽)、DropOnly(只允许放置)、DragDrop(允许拖拽和放置)、InternalMove(只移动不复制)

hdsHDS6的博客 1031

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

具有拖放操作功能的组件

import sys from PyQt5.QtWidgets import (QApplication,QWidget,QAbstractItemView,QTreeWidgetItem,QListWidget,QTreeWidget,QTableWidget) from PyQt5 import QtCore from PyQt5.QtCore import pyqtSlot,Qt,QEvent from ui_widget import Ui_Widget class QmyWidget(Q...

salmonwilliam的博客 626

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Qt:Drag-Drop操作在QGraphicsView及Model/View框架下的实现

最近使用到Qt的Drag Drop功能,结合自己的例子写下来给大家分享一下。实现从QTreeView拖动Node到QGraphicsView上,以及QGraphicsView上item之间的拖动。 先来说Model/View中的实现 1.Model/View要实现Drag Drop操作,首先需要为View设置DragDropMode属性。 enum DragDropMode { No...

weixin_30339969的博客 616

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Qt | 便捷类中使用拖放功能 Drag

Qt | 便捷类中使用拖放功能 Drag

hw5230的博客 760

QListWidget 实现内部拖拽改变列表顺序问题:同步修改管理列表中的顺序

1. 如何拖拽 很容易知道对列表 listwidget 设置 dragDropMode 为 InternalMove 模式,即可实现拖拽的功能。 问题在于:拖拽后只会修改用户视图 UI 中的顺序,在实际开发中,用 QList<QString> temp列表来管理时如何同步修改顺序。 第一时间想到的是找类中的信号,我试过 QListWidget 的信号比如:itemChanged,并不适用。一时间 2 同步更新列表解决方法 connect(listWidget->model(

m0_60752380的博客 1450

对DragDropMode的理解

QAbstractItemView::DragOnly 1 The view supports dragging of its own items 感觉没什么用啊,看到一个禁止拖拽的小图表 QAbstractItemView::DropOnly 2 The view accepts drops 什么也看不到 QAbstractItemView::DragDrop 3 The view sup...

Kp0fS的草稿纸 2109

第15.18节 PyQt(Python+Qt)入门学习:Model/View架构中视图Item Views父类详解

一、概述 在PyQt图形界面中,支持采用Model/View架构实现数据和界面逻辑分离,其中Model用于处理数据存储,View用于界面数据展现,当Model中的数据变化后对应界面视图自动更新,反之当View中数据进行修改之后,也支持通知Model进行数据调整。 为了快速支持Model/View架构,PyQt提供了一系列类来支持,在Qt Designer中Item Views部件栏的视图部件都是用...

老猿Python 2204

PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled属性的困惑

dragEnabled属性用于控制视图是否支持拖拽,可以通过dragEnabled()、setDragEnabled(bool enable)进行属性访问和设置。 dragEnabled属性很简单,但老猿采用QListView和QTableView验证后,发现该属性实际上没有什么作用 ...

老猿Python 1762

详解QT下拖动操作Drag-Drop的实现

QT下实现Drag-Drop是极其容易的,下面给大家介绍一下。 所谓拖动,自动有一个源窗口,一个目标窗口,不过有时候源窗口与目的窗口是同一个窗口。 源窗口 在鼠标Press的时候,记录起始点为dragPosition(此为成员变量);在Move的时候,检测与起始点的距离,当拖动一定距离的时候,认为开启了一个拖动操作。按下面例子,鼠标会为成拖动的样式,并有一个图片显示被拖动的物体的轮廓。 ...

阿发你好 2万+
上一篇: PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系
下一篇: PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值