标准对话框

标准对话框

标准对话框有五类,分别是文件对话框(QFileDialog)、颜色对话框(QColorDialog)、字体对话框(QFontDialog)、输入对话框(InputDialog )、消息对话框(QMessageBox),通过不同种类的标准对话框打开对应的形式的对话框,此文章简单介绍对话框的类型和使用方法

一、文件对话框QFileDialog

如图:
在这里插入图片描述

以下代码定义了一个dialogBox类,现在设想以下需要做的功能
功能:点击部件,槽方法响应打开标准文件对话框,并且能选择指定类型的文件,将所选文件的文件路径输出到窗体界面的QLineEdit行编辑器中

class dialogBox : public QDialog
{
    Q_OBJECT

public:
    dialogBox(QWidget *parent = nullptr);
    ~dialogBox();
private slots:
    void ShowDialogFile();


private:
    Ui::dialogBox *ui;
    QPushButton *m_fileBtn;     //打开文件对话框
    QLineEdit *m_fileLineEdit;  //显示所选文件路径
    QGridLayout *m_mainLayout;  //布局管理器
};

第一步:点击部件,槽方法响应打开标准文件对话框

dialogBox::dialogBox(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::dialogBox)
{
    ui->setupUi(this);
    setWindowTitle("文件标准对话框");
    m_fileBtn=new QPushButton("打开文件");
    m_fileLineEdit=new QLineEdit(this);
    
    m_mainLayout=new QGridLayout(this);
    m_mainLayout->addWidget(m_fileBtn,0,0);
    m_mainLayout->addWidget(m_fileLineEdit,0,1);
    connect(m_fileBtn,&QPushButton::clicked,this,&dialogBox::ShowDialogFile);
    
	//这行代码可要可不要
  //setLayout(m_mainLayout);
}
dialogBox::~dialogBox()
{
    delete ui;
}

第二步:槽方法的实现
槽函数:void dialogBox::ShowDialogFile()

getOpenFileName()方法介绍:
QFileDialog文件对话框的功能:
QFileDialog文件对话框类调用getOpenFileName(),QFileDialog::getOpenFileName()这个方法是打开文件夹,并选中文件,选中文件后返回所选文件的路径
第一个参数:父窗口,意思是打开的文件对话框的窗体是当前的窗体,并不会多产一个窗体
第二个参数:文件对话框的窗体标签
第三个参数:目录,用 " . "表示是打开的默认路径
第四个参数:过滤通过字符串要查找的文件,要添加文件后缀,例如:(.h),要过滤多种文件就要添加多个后缀,用" ;; "来分开,如C++ files(.cpp);;C files(.c);😭.txt)
个人理解"C++ files(.cpp),"C++ files"部分表示下拉目录的显示文本,是字符串,
"(
.cpp)"是文件的后缀即文件类型

以下是代码实现

void dialogBox::ShowDialogFile()
{
    QString str=QFileDialog::getOpenFileName(this,
                                 "标准文件打开对话框",
                                 ".",
                                 "C++ files(*.cpp);;C files(*.c);;header files(*.h)");
    //qDebug()<<str;此处可以尝试打印
    //将获取的文件路径设置给行编辑器
    m_fileLineEdit->setText(str);
}

此行代码是实现选择目录文件:
使用QFileDialog::getExistingDirectory()来打开目录对话框并选择目录文件

 QString path=QFileDialog::getExistingDirectory(this,
                                                   "选择目录",
                                                   ".");

第三步:很简单,将获取的文件路径设置给行编辑器m_fileLineEdit
m_fileLineEdit->setText(str);

效果展示:
在这里插入图片描述

二、颜色对话框QColorDialog

如图:
在这里插入图片描述

所实现的功能:通过点击一个部件,然后打开颜色对话框,之后进行颜色的选择,将颜色填充到部件之中,以下代码定义了一个dialogBox类

class dialogBox : public QDialog
{
    Q_OBJECT

public:
    dialogBox(QWidget *parent = nullptr);
    ~dialogBox();
private slots:
    void ShowColorFrame();//打开颜色对话框的槽方法
private:
    Ui::dialogBox *ui;
    QPushButton *m_colorBtn;
    QFrame *m_colorFrame;       //显示所选颜色效果,是无边框
    QGridLayout *m_mainLayout;  //布局管理器
};

第一步:点击按钮,槽方法响应,然后打开标准颜色对话框

dialogBox::dialogBox(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::dialogBox)
{
    ui->setupUi(this);
    setWindowTitle("文件标准对话框");
    m_colorBtn=new QPushButton("颜色标准对话框");
    m_colorFrame=new QFrame;
    m_colorFrame->setFrameStyle(QFrame::Box);//设置边框风格为Box
    m_colorFrame->setAutoFillBackground(true);  //设置可以自动填充背景的属性


    m_mainLayout=new QGridLayout(this);
    m_mainLayout->addWidget(m_colorBtn,0,0);
    m_mainLayout->addWidget(m_colorFrame,0,0);

    connect(m_colorBtn,&QPushButton::clicked,this,&dialogBox::ShowColorFrame);
    setLayout(m_mainLayout);
}

此处使用的无边框类QFrame,要对其填充,首先要设置好他的风格和属性
这里设置为QFrame::Box,设置可以自动填充背景

第二步:槽方法的实现
槽函数:void dialogBox::ShowColorFrame()

getColor()方法介绍:
QColorDialog颜色对话框类,QColorDialog颜色对话框调用getColor()方法就会出现一个可选的颜色面板,当选择其中的颜色后,此QColorDialog::getColor()就会返回像素值,其参数就是默认的颜色

void dialogBox::ShowColorFrame()
{
    QColor color=QColorDialog::getColor(Qt::yellow);//默认颜色是yello
    //判断颜色是否合法
    if(color.isValid()){
        m_colorFrame->setPalette(QPalette(color));
    }
}

将颜色填充到无边框的对话框中,首先先设置一个setPalette调色板的颜色,以color给初始化
效果图:
在这里插入图片描述

三、字体对话框QFontDialog

如图:
在这里插入图片描述

功能:点击部件,打开标准字体对话框,然后选择字体样式和字体大小,再将原来QLineEdit的内容以选择的字体输出,以下代码定义了一个dialogBox类

class dialogBox : public QDialog
{
    Q_OBJECT

public:
    dialogBox(QWidget *parent = nullptr);
    ~dialogBox();
private slots:
    void ShowFont();
private:
    Ui::dialogBox *ui;
    QPushButton *m_fontBtn;     //打开字体对话框
    QLineEdit *m_fontLineEdit;  //显示所选字体的效果
    QGridLayout *m_mainLayout;  //布局管理器
};

第一步:定义槽方法,点击部件,槽方法响应打开标准字体对话框

dialogBox::dialogBox(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::dialogBox)
{
    ui->setupUi(this);
    setWindowTitle("文件标准对话框");
    m_fontBtn=new QPushButton("字体标准对话框");
    m_fontLineEdit=new QLineEdit("独断万古,一叶遮天");
    
    m_mainLayout=new QGridLayout(this);
    m_mainLayout->addWidget(m_fontBtn,0,0);
    m_mainLayout->addWidget(m_fontLineEdit,0,1);
    
    connect(m_fontBtn,&QPushButton::clicked,this,&dialogBox::ShowFont);
    setLayout(m_mainLayout);
}

第二步:槽函数的实现
槽函数:void dialogBox::ShowFont()
getFont()方法介绍:
QFontDialog字体对话框,QFontDialog字体对话框类调用getFont()方法就会打开选择字体的面板,字体标准对话框,有字体样式,字体大小,返回值是字体

void dialogBox::ShowFont()
{
    bool ok;
    QFont font = QFontDialog::getFont(&ok);
    if(ok){
        //m_fontLineEdit设置字体
        m_fontLineEdit->setFont(font);
    }
}

效果图:
在这里插入图片描述

四、输入对话框InputDialog

在这里插入图片描述

假如要设计一个界面,且界面上点击部件就能打开标准信息输入对话框,并且能对信息进行编辑、选择,想要的效果如图:
在这里插入图片描述功能:
修改姓名:点击修改姓名,就会弹出一个姓名编辑的对话框,然后将修改的姓名输出的原来的部件中
修改年龄:点击修改性别,然后会弹出一个选择的"男"、"女"的条目,将选择的条目输出到原来的部件
修改年龄:点击修改年龄,就会弹出输入整型的输入框,将输入的年龄输出到原来的部件
修改成绩:点击修改成绩,这里是使用Double类型,成绩可有小数,将修改的成绩输出到原来的部件

步骤一:定义InputDialog 类,在类中定义了很多部件,同时也定义了四个按钮的槽函数

class InputDialog : public QDialog
{
    Q_OBJECT
public:
    InputDialog(QWidget *parent=0);
private slots:
    void ChangeName();
    void ChangeSex();
    void ChangeAge();
    void ChangeScore();

private:
    QLabel *m_nameTitle;    //姓名
    QLabel *m_sexTitle;     //性别
    QLabel *m_ageTitle;     //年龄
    QLabel *m_scoreTitle;   //成绩

    QLabel *m_nameLabel;    //对应的名字标签
    QLabel *m_sexLabel;     //对应的性别标签
    QLabel *m_ageLabel;     //对应的年龄标签
    QLabel *m_scoreLabel;   //对应的成绩标签

    QPushButton *m_nameBtn; //修改姓名按钮
    QPushButton *m_sexBtn;  //修改性别按钮
    QPushButton *m_ageBtn;  //修改年龄按钮
    QPushButton *m_scoreBtn;//修改成绩按钮

    QGridLayout *m_layout;  //布局管理器
};

步骤二:将部件进行初始化,并用布局管理器进行部件的管理,然后设置点击按钮与槽的连接

connect(m_nameBtn,&QPushButton::clicked,this,&InputDialog::ChangeName);
connect(m_sexBtn,&QPushButton::clicked,this,&InputDialog::ChangeSex);
connect(m_ageBtn,&QPushButton::clicked,this,&InputDialog::ChangeAge);
connect(m_scoreBtn,&QPushButton::clicked,this,&InputDialog::ChangeScore);

步骤三:槽函数的实现

(一)getText()输入单行文字

槽函数:void ChangeName();
实现功能:打开标准输入对话框,让用户进行姓名的编辑,并且将编辑的姓名文本信息设置到原来的m_nameLabel姓名标签中

QInputDialog::getText()方法介绍:
//QInputDialog::getText()打开字符串输入框,返回值是QString类型字符串
//第一个参数是父窗口
//第二个参数是打开的标准输入框窗口的标题
//第三个是提示标签
//第四个参数是编辑的方式
//第五个参数是编辑的控件的文本信息

void InputDialog::ChangeName()
{
    bool ok;
    QString Sname = QInputDialog::getText(this,
                          "标准字符串输入对话框",
                          "请编辑姓名",QLineEdit::Normal,
                          m_nameLabel->text(),&ok);
    //判断是否调用成功,并且输入的名字是否空的
    if(ok && !Sname.isEmpty()){
        //将编辑的名字赋给m_nameLabel
        m_nameLabel->setText(Sname);
    }
}

效果图:
在这里插入图片描述

(二)getItem()从条目中选择输入

槽函数:void InputDialog::ChangeSex()
实现功能:点击修改性别按钮,就会打开标准输入对话框,对话框中对性别修改的部分可选择其中的条目,将选择的条目的文本设置到m_sexLabel标签中

QInputDialog::getItem()方法介绍:
//QInputDialog::getItem()打开条目输入框,返回的是字符串QString
//使用标准输入对话框QInputDialog,调用getItem()方法
//第一个参数是父窗口,第二个参数是打开窗口的标签,
//第三个参数是提示标签,第四个参数是条目
//第五个参数是,当前选第几个条目,默认设为0
//第六个参数是条目是否能编辑,这是是不能,只能选择,所以使用false;
//第七个参数是bool,表示保存是否成功

void InputDialog::ChangeSex()
{
    QStringList sexList;
    sexList<<"男"<<"女"<<"未知";
    bool ok;
    QString sex=QInputDialog::getItem(this,
                          "标准条目输入对话框",
                          "请选择性别:",
                          sexList,
                          0,
                          false,
                          &ok);

    if(ok && !sex.isEmpty()){
        m_sexLabel->setText(sex);
    }
}

效果图:
在这里插入图片描述

(三)getInt()输入整型数据

槽函数:void InputDialog::ChangeAge()
实现的功能:点击修改年龄,就会打开整数输入框进行年龄的编辑,将编辑的年龄输出到m_ageLabel标签中

QInputDialog::getInt()介绍:
//获取整数的标准输入对话框,QInputDialog::getInt()返回的是用户编辑的年龄,int类型
//第一个参数是父窗口,第二个参数是打开窗口的标题,
//第三个参数是提示标签,
//第四个参数是值,可以给一个默认值,这里是m_ageLabel->text()的文本,然后转为int类型
//第五个参数是,最小值,设置为0
//第六个参数是最大值
//第七个参数是步长
//第七个参数是保存成不成功

void InputDialog::ChangeAge()
{
    bool ok;
    int age=QInputDialog::getInt(this,
                         "标准int数据类型输入对话框",
                         "请编辑年龄",
                         m_ageLabel->text().toInt(),
                         0,
                         120,
                         1,
                         &ok);
    if(ok){
        m_ageLabel->setText(QString::number(age));
    }
}

效果图:
在这里插入图片描述

(四)getInt()输入浮点数

槽函数:void InputDialog::ChangeScore()
功能实现:点击修改成绩,就会打开标准输入对话框,进行对成绩的编辑(成绩有小数)所以设置成绩的编辑支持小数,将修改的成绩设置到m_scoreLabel标签中

QInputDialog::getDouble()方法介绍:
//QInputDialog::getDouble()打开Double标准输入框,返回值是Double类型
//第一个参数是父窗口,第二个参数是打开窗口的标题,
//第三个参数是提示标签
//第四个参数当前需要编辑的Double类型的数据
//第五个参数是编辑数据的最小值
//第六个参数是编辑数据的最大值
//第七个参数是精度,就是小数点的位数

void InputDialog::ChangeScore()
{
    bool ok;
    double score=QInputDialog::getDouble(this,
                                         "成绩标准输入对话框",
                                         "请编辑分数",
                                         m_scoreLabel->text().toDouble(),
                                         0,
                                         100,
                                         1,
                                         &ok);

    if(ok){
        m_scoreLabel->setText(QString::number(score));
    }
}

效果图:
在这里插入图片描述

五、消息对话框QMessageBox

在这里插入图片描述

如图,要设计一个对话框,然后点击不同QPushButton按钮就会打开不同点对话框,这个项目实现了上图中六种消息对话框,实现此方法也要使用信号与槽,将信号和槽方法连接,关于部件在布局管理器的添加不再描述

在这里插入图片描述

步骤一:实现类的创建,槽方法和部件的定义

class QMsgBoxDlg : public QDialog
{
    Q_OBJECT
public:
    QMsgBoxDlg(QWidget *parent=0);
private slots:
    void ShowQuestionMsDlg();
    void ShowInforMsDlg();
    void ShowWrMsDlg();
    void ShowCrMsDlg();
    void ShowAbMsDlg();
    void ShowAbQtMsDlg();

private:
    QLabel *m_tipLable;
    QPushButton *m_questuinBtn;     //问题对话框
    QPushButton *m_informationBtn;  //信息消息对话框
    QPushButton *m_waringBtn;       //警告对话框
    QPushButton *m_criticalBtn;     //错误对话框
    QPushButton *m_aboutQtBtn;      //关于Qt对话框
    QPushButton *m_aboutBtn;        //关于对话框

    QGridLayout *m_mainLayout;      //布局管理器
};

步骤二:信号和槽函数的连接

connect(m_questuinBtn,&QPushButton::clicked,this,&QMsgBoxDlg::ShowQuestionMsDlg);
connect(m_informationBtn,&QPushButton::clicked,this,&QMsgBoxDlg::ShowInforMsDlg);
connect(m_waringBtn,&QPushButton::clicked,this,&QMsgBoxDlg::ShowWrMsDlg);
connect(m_criticalBtn,&QPushButton::clicked,this,&QMsgBoxDlg::ShowCrMsDlg);
connect(m_aboutBtn,&QPushButton::clicked,this,&QMsgBoxDlg::ShowAbMsDlg);
connect(m_aboutQtBtn,&QPushButton::clicked,this,&QMsgBoxDlg::ShowAbQtMsDlg);

步骤三:信息框槽方法的实习

(一)question()询问并获取是否确认的消息框

槽函数:void QMsgBoxDlg::ShowQuestionMsDlg()

QMessageBox::question()介绍:
//问题消息框有个特定就是有一个大问号图标
//QMessageBox::question()返回用户所选择的结果,按键是枚举值,返回值是按键
//第一个参数:this作为副窗口
//第二个参数:问题消息框的标题
//第三个参数:显示的文本
//第四个参数:标准的按钮,有取消,确认等多个按钮
//第五个参数:默认选择的按钮,这里设置了Ok,如果不设置按钮,那么默认为Ok
void QMsgBoxDlg::ShowQuestionMsDlg()
{
m_tipLable->setText(“提示消息框”);
int res=QMessageBox::question(this,
“问题消息框”,
“您已打开问题消息框,是否关闭”,
QMessageBox::Ok | QMessageBox::Cancel,
QMessageBox::Ok);
switch (res) {
case QMessageBox::Ok:
m_questuinBtn->setText(“问题消息框–确定”);
break;
case QMessageBox::Cancel:
m_tipLable->setText(“问题消息框–取消”);
break;
default:
break;
}
}
效果图
在这里插入图片描述

(二)information()信息消息框

槽函数:void QMsgBoxDlg::ShowInforMsDlg()

QMessageBox::information()介绍:
//QMessageBox::information()返回用户所选择的结果,枚举值,就是按钮的值
//第一个参数:this作为副窗口
//第二个参数:信息消息框的标题
//第三个参数:显示的文本
//第四个参数:标准的按钮,有取消,确认等多个按钮
//第五个参数:默认选择的按钮,这里设置了Ok,没有设置按钮的,其自动默认是Ok
//信息消息框一般只弹出一个信息,不需要做其他处理,所以可直接关闭窗口,不需要按钮
//并且信息消息框是模态的,必须关闭当前窗体才能进行下一步的操作

void QMsgBoxDlg::ShowInforMsDlg()
{
    m_tipLable->setText("信息消息框");
    QMessageBox::information(this,
                             "信息提示框",
                             "这是信息提示框,我也不知道该留下什么信息!",
                             QMessageBox::Ok | QMessageBox::Cancel);
}

效果图:
在这里插入图片描述

(三)warning()警告消息框

槽函数:void QMsgBoxDlg::ShowInforMsDlg()

QMessageBox::warning()介绍:
//警告消息框的特点有一个警告的黄色图标
//QMessageBox::warning()返回用户所选择的结果,枚举值,就是按钮的值
//第一个参数:this作为副窗口
//第二个参数:警告消息框的标题
//第三个参数:显示的文本
//第四个参数:标准的按钮,有取消,确认等多个按钮
//第五个参数:默认选择的按钮,这里设置了Ok

void QMsgBoxDlg::ShowWrMsDlg()
{
  m_tipLable->setText("警告信息框");
    int res=QMessageBox::warning(this,
                         "警告消息框",
                         "操作不合法,是否继续?",
                         QMessageBox::Ok | QMessageBox::No | QMessageBox::Discard,
                         QMessageBox::No);
    switch (res) {
    case QMessageBox::No:
        m_tipLable->setText("用户取消下一步操作");
        break;
    case QMessageBox::Ok:
        m_tipLable->setText("用户选择继续操作");
        break;
    case QMessageBox::Discard:
        m_tipLable->setText("用户选择忽视警告");
        break;
    default:
        break;
    }
}

效果图:
在这里插入图片描述

(四)critical()错误消息框

槽函数:void QMsgBoxDlg::ShowCrMsDlg()

QMessageBox::critical()介绍:
//错误消息框的特点有一个红色的错误图标
//第一个参数:this作为副窗口
//第二个参数:信息消息框的标题
//第三个参数:显示的文本
//第四个参数:标准的按钮,有取消,确认等多个按钮

   
void QMsgBoxDlg::ShowCrMsDlg()
{
    m_tipLable->setText("错误信息框");
    QMessageBox::critical(this,"错误消息框","程序崩溃");
}

效果图:
在这里插入图片描述

(五)about()关于消息框

槽函数:void QMsgBoxDlg::ShowAbMsDlg()

QMessageBox::about()介绍:
//第一个参数:this作为副窗口
//第二个参数:信息消息框的标题
//第三个参数:显示的文本
//第四个参数:标准的按钮,有取消,确认等多个按钮

void QMsgBoxDlg::ShowAbMsDlg()
{
    m_tipLable->setText("关于信息框");
    QMessageBox::about(this,"关于消息框","关于网络编程的信息介绍");
}

效果图:
在这里插入图片描述

(六)aboutQt()关于Qt消息框

槽函数:void QMsgBoxDlg::ShowAbQtMsDlg()

QMessageBox::aboutQt()介绍:
//QMessageBox::aboutQt()
//第一个参数:this作为副窗口
//第二个参数:信息消息框的标题,
//关于Qt的信息框显示的文本不需要设置,此方法自动设置文本信息

void QMsgBoxDlg::ShowAbQtMsDlg()
{
    m_tipLable->setText("关于Qt信息框");
    QMessageBox::aboutQt(this,"关于Qt的消息框");
}

效果图:
在这里插入图片描述

(七)QMessageBox自定义的消息框

不使用以上的消息框,自己定义消息框的按钮,以及消息的图标等

自定义了一个类,类中定义槽函数


```cpp
class QMsgBoxDlg : public QDialog
{
    Q_OBJECT
public:
    QMsgBoxDlg(QWidget *parent=0);
private slots:
    void ShowCustomDlg();
private:
    QLabel *m_tipLable;
    QPushButton *m_customBtn;       //自定义的消息框
    QLabel *m_customLabel;          //自定义消息框标签
    QGridLayout *m_mainLayout;      //布局管理器
};

对部件进行初始化,且用布局管理器进行布局
这里对QLabel标签的边框风格进行设置

QMsgBoxDlg::QMsgBoxDlg(QWidget *parent):QDialog(parent)
{
    this->setWindowTitle("标准信息对话框集合");
    //构造部件
    m_tipLable=new QLabel("请选择一种消息框");
    m_customBtn=new QPushButton("自定义的消息框");
    m_customLabel=new QLabel("使用自定义的消息框");
    m_customLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
    m_mainLayout->addWidget(m_customBtn,7,0);
    m_mainLayout->addWidget(m_customLabel,7,1);
    connect(m_customBtn,&QPushButton::clicked,this,&QMsgBoxDlg::ShowCustomDlg);
}

槽函数void ShowCustomDlg()的实现

addButton()方法介绍:
//添加自定义的按钮,
//第一个参数是按钮的文本
//第二个参数是按钮的角色
setIconPixmap()方法介绍:
此方法是设置自定义消息框的图标,可以使用图标文件、图片文件

void QMsgBoxDlg::ShowCustomDlg()
{
    m_customLabel->setText("自定义消息框");
    QMessageBox customMsgBox;
    customMsgBox.setWindowTitle("自定义消息框,不使用标准的消息框");
    QPushButton *yes=customMsgBox.addButton("这是哪?",
                           QMessageBox::ActionRole);
    //添加自定义的按钮
    QPushButton *no=customMsgBox.addButton("你猜!",
                                           QMessageBox::ActionRole);

    //采用标准的cancel按钮
    QPushButton *cancel=customMsgBox.addButton(QMessageBox::Cancel);

    //设置自定义的图标;
    customMsgBox.setIconPixmap(QPixmap("login.ico"));
    customMsgBox.exec();

    if(customMsgBox.clickedButton()==yes){
        m_customLabel->setText("点了这是哪?");
    }
    if(customMsgBox.clickedButton()==no){
        m_customLabel->setText("点了你猜");
    }if(customMsgBox.clickedButton()==cancel){
        m_customLabel->setText("点了标准按钮");
    }
}

效果图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值