qt学习总结

一.基本部件:

#include <QWidget>
	class LayoutGui : public QWidget
Widget 控件(组件)在创建时是不可见的,它可以包含子控件,在删除该 Widget 时,子控件也将一
起删除。
        
#include <QLCDNumber>
	class LcdNumberGui : public QLCDNumber
#include <QDebug>       //调试类
    
#include <QInputDialog> //标准输入框
#include <QListWidget>
#include <QTextEdit>
        indiv_edit = new QTextEdit;
#include <QDialog>

#include <QTableWidget> //表格组件:内置了网络布局
#include <QTableView>
#include <QListWidget>  //列表组件:
#include <QListView>
#include <QTreeWidget>  //树形组件:
#include <QTreeView>
#include <QColumnView>

#include <QTableWidgetItem> //表项
#include <QLabel>

#include <QPixmap>

#include <QMouseEvent>  //鼠标事件
#include <QKeyEvent>    //按键事件
#include <QLCDNumber>
        

按钮:

//QAbstractButton类
    1.是按钮部件的抽象基类,提供了按钮所共有的功能。
	2.实现了一个抽象按钮,并且让它的子类来指定如何处理用户的动作,并指定如何绘制按钮。
	3.提供了点击和勾选按钮。    
QRadioButton和QCheckBox类只提供了勾选按钮,
QPushButton和QToolButton提供了点击按钮,如果需要的话,它们还可以提供切换行为。
任何按钮,都可以显示一个包含文本和图标的标签。setText()用来设置文本,setIcon()可以置图标。如果按钮被禁用,其标签更改为“disabled”样式。

常用状态:
    isDown() 按钮是否被按下。
    isChecked() 按钮是否被选中。只有切换按钮才能被切换为选中或不选中(请看下面)。
    isEnabled() 按钮是否可以被用户按下。
    setAutoRepeat() 如果用户按下按钮,按钮是否可以自动回复。
    setToggleButton() 按钮是否是一个切换按钮。

信号:QAbstractButton提供了四个信号:
    pressed() 当鼠标光标在按钮内,鼠标左键被按下时,发送此信号。
    released() 当鼠标左键被释放时,发送此信号。
    clicked() 当按钮被按下然后又被释放,或按下快捷键,或当animateClick()被调用时,发送此信号。
    toggled() 当切换按钮的状态变化时,发送此信号。
使用:
 	 QAbstractButton *pButton = new QPushButton(this);
    // 设置图标、图标大小、文本
    pButton->setIcon(QIcon(":/Images/logo"));
    pButton->setIconSize(QSize(18, 18));
    pButton->setText("Click Me");
	// 连接信号与槽
    connect(pButton, &QAbstractButton::clicked, this, &MainWindow::onClicked);
    void MainWindow::onClicked()
    {
        qDebug() << "Enter...";		//点击按钮时,就会输出信息”Enter…”。
    }
互斥:只能选中一个按钮
    raidobutton_1->setCheckable(true);  //设置可选
    raidobutton_1->setChecked(true);    //设置选中
	
    
//QPushButton  //命令按钮
    QPushButton *file_button = new QPushButton("文 件");

//QtoolButton	//工具按钮  //ToolButton 控件 
    QToolButton类提供了用于命令或选项可以快速访问的按钮,通常可以用在QToolBar里面。
    工具按钮和普通的命令按钮不同,通常不显示文本,而显示图标。
    
//RadioButton  单选按钮,切换按钮
QRadioButton部件提供了一个带有文本标签的单选框(单选按钮)。
可以切换选中(checked)或未选中(unchecked)状态的选项按钮
	raidobutton_1 = new QRadioButton("男");
    raidobutton_1->setCheckable(true);  //可选
    raidobutton_1->setChecked(true);    //选中
	raidobutton_2 = new QRadioButton("女");
    raidobutton_2->setCheckable(true);
	
//按钮组QButtonGroup  //单选按钮做互斥
如果你需要为属于同一父部件的单选框设置多个互斥按钮组,把它们加入QButtonGroup中。
    QButtonGroup *button_group = new QButtonGroup;
    button_group->addButton(raidobutton_1);

    button_group->addButton(raidobutton_2);
//QCheckBox    //复选框,选项按钮,可多选
	like_box_1 = new QCheckBox("足 球");
    like_box_1->setCheckable(true);
    like_box_1->setChecked(true);
    like_box_2 = new QCheckBox("蓝 球");
    like_box_2->setCheckable(true);

QSpinBox和QDoubleSpinBox均派生自QAbstractSpinBox
QSpinBox旨在处理整数和离散值(例如:月份名称)
QDoubleSpinBox则用于处理浮点值。默认的精度是2位小数,但可以通过setDecimals()来改变。
他们之间的区别就是处理数据的类型不同,其他功能都基本相同。
//QSpinBox做年龄
    QSpinBox *age_box;
    age_box = new QSpinBox;
    age_box->setRange(1,300);		// 范围
    age_box->setSingleStep(1);		// 步长
    age_box->setValue(24);			// 当前值(默认值)

//QDoubleSpinBox
  上面的所有功能对于QDoubleSpinBox同样适用。 
  主要使用setDecimals()设置精度,然后利用setSingleStep()来设置步长即可。
	QDoubleSpinBox *pSpinBox = new QDoubleSpinBox(this);
    pSpinBox->setRange(0, 20); 		 // 范围
    pSpinBox->setDecimals(3);  		// 精度
    pSpinBox->setSingleStep(0.005); // 步长

//QToolBox类: 提供了一个列(选项卡式的)部件条目
	可以在一个tab列上显示另外一个,并且当前的item显示在当前的tab下面。
    每个tab都在tab列中有一个索引位置。tab的item是一个QWidget 。 
 	1.创建QGroupBox,并设置布局管理器为竖直布局
    QGroupBox *group_1 = new QGroupBox;
    QVBoxLayout *vlayout_1 = new QVBoxLayout(group_1);   
  	2.创建QToolButton,将把按钮加入竖直布局
    QToolButton *button_1_1 = this->add_button("贝 贝","://images/bb.png");
    QToolButton *button_1_2 = this->add_button("京 京","://images/jj.png");
    QToolButton *button_1_3 = this->add_button("欢 欢","://images/hh.png");
//封装,添加用户函数	
QToolButton *MyQQ::add_button(const QString &name,const QString &path) //添加一个用户
{
    QToolButton *toolbutton_1_1 = new QToolButton;
    toolbutton_1_1->setText(name);      	//设置按钮文本
    toolbutton_1_1->setIcon(QIcon(path));   //设置按钮图片
    toolbutton_1_1->setIconSize(QSize(ICONWIDTH,ICONHEIGHT));   //设置按钮大小
    toolbutton_1_1->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);   //设置图片和文本的样式
    toolbutton_1_1->setAutoRaise(true);     //设置自动弹出
    this->connect(toolbutton_1_1,SIGNAL(clicked(bool)),this,SLOT(slot_message()));
    return toolbutton_1_1;
}

对话框:

#include <QFrame>       //框架
Frame 控件(框架)用来存放其他控件,也可用于装饰。它一般用来作为更加复杂容器的基础,也可
以用在 form 中作为占位控件。

//单行文本框
QLineEdit:是一个单行文本输入框。
	1.允许用户输入和编辑单行纯文本,提供了很多有用的编辑功能,包括:撤消和重做、剪切和粘贴、拖放
	2.通过改变输入框的echoMode(),同时也可以设置为一个“只写”字段,用于输入密码等。
	3.文本的长度可以被限制为maxLength(),可以使用一个validator()inputMask()来任意限制文本

 	QLineEdit *lineEdit;	   						 //声明 QLineEdit 控件
    lineEdit = new QLineEdit(this);					//创建 QLineEdit 控件
	lineEdit->setGeometry(QRect(100,100,200,25));    //位置大小
	
//文本域,多行文本框
QTextEdit:可以使用setText()insert()来改变文本,通过text()来获取文本;
	QTextEdit *textEdit; 	 						//声明
    textEdit = new QTextEdit(this);					//实例 QTextEdit 控件
    textEdit->setGeometry(QRect(50,50,200,150));    //控件位置大小
    textEdit->setText("我是第一行<br/>我是第二行");    //内容

//下拉列表框
#include <QComboBox>    				//下拉列表
	QComboBox *comboBox;				//声明
    comboBox = new QComboBox(this);		//构造控件
	//edu_box->addItem("高 中");
    comboBox->setGeometry(QRect(50,50,120,25));	//控件显示位置大
    QStringList str;
    str << "数学" << "语文" << "地理";    //定义字符串列表
    comboBox->addItems(str);   			//将字符串列表绑定 QComboBox 控件

//整形分量框
#include <QSpinBox> 				
	QSpinBox *spinBox;				//声明控件
    spinBox = new QSpinBox(this);	//创建
    spinBox->setGeometry(QRect(50,50,100,25));	//位置
    spinBox->setRange(0,200);    //值范围
    spinBox->setValue(10);   	 //初始值
    spinBox->setSuffix("元");    //后缀
    spinBox->setPrefix("$");    //前缀

//套路:
一个待输入的框,一个按钮,通过按钮来设置这个框的“字体,颜色,填入文件名,填充名字,修改图片等”
    1.构造框和按钮,
    2.设置连接槽函数
    3.槽函数实现:
    	获得相关图片地址,文件地址,名字/性别/年龄等
    	通过框的设置函数,将获得的内容赋给框

//标准文件对话框:获取文件名   
#include <QFileDialog>  
    QLineEdit *fileedit;   		 //声明文件对话框
    fileedit = new QLineEdit;    //构建对话框
	//构造按钮
	//连接槽函数
	this->connect(file_button,SIGNAL(clicked(bool)),this,SLOT(slot_getFile()));
void DialogGui::slot_getFile()//获取文件名的槽函数
{
    qDebug() << __func__ << endl;   //Qt中输出要用调试输出
    //打开文件对话框,获取文件路径,修改lineedit的内容
    QString path = QFileDialog::getOpenFileName(this,"文件对话框","D:\\","C++头文件(*.h);;C++源文件(*.cpp);;所有文件(*.*)");       //打开文件对话框
    if(!path.trimmed().isEmpty())   //判断用户是否点击打开,trimmed()去除首尾空格
        fileedit->setText(path);    //通过文本的设置函数,将获得的文本地址赋给框
}

//字体对话框:设置字体
#include <QFontDialog>  
    QLineEdit *fontedit;    				//声明对话框
    fontedit = new QLineEdit("中国,加油");	//构建对话框,并初始化
	//构造按钮 。。。
	//连接槽函数
	this->connect(font_button,SIGNAL(clicked(bool)),this,SLOT(slot_getFont()));
void DialogGui::slot_getFont()
{
    qDebug() << __func__ << endl;   //Qt中输出要用调试输出
    bool isok = false;											//打开字体对话框
    QFont font = QFontDialog::getFont(&isok,QFont("隶书",35),this,"字体对话框");
    if(isok)    //如果为true表示用户点击了确定
        fontedit->setFont(font);	//通过字体的设置函数,将获得的字体赋给框
}

//颜色对话框:颜色填充
#include <QColorDialog> 
    QFrame *colorFrame;     	//声明颜色的方框
	colorFrame = new QFrame;	//构造方框
    colorFrame->setFrameShape(QFrame::Box); //设置方框的形状
    colorFrame->setAutoFillBackground(true);    //设置方框的背景颜色自动填充
	//构造按钮 。。。
	//连接槽函数
    this->connect(color_button,SIGNAL(clicked(bool)),this,SLOT(slot_getColor()));
void DialogGui::slot_getColor()   //获取颜色
{
    qDebug() << __func__ << endl;   //Qt中输出要用调试输出
    QColor color = QColorDialog::getColor(Qt::red,this,"颜色对话框");
    if(color.isValid())     //验证颜色数是否有效
    {
        //设置颜色:通过Palette去设置颜色
        colorFrame->setPalette(QPalette(color));//通过颜色的设置函数,将获得的颜色赋给框
    }
}

//标准输入框:手动输入,如输入名字,年龄等信息;
#include <QInputDialog> 
    name_label = new QLabel;					//构造一个文本框
	name_label->setAlignment(Qt::AlignCenter);  //设置label上的文本居中
    name_label->setFrameStyle(QFrame::Panel | QFrame::Sunken);  //设置label的样式为panel和sunken
  	QPushButton *name_button = new QPushButton;		//构造一个按钮
    name_button->setIcon(QIcon("://images/btn.png"));//给按钮做一个图片	
	//连接槽函数
    this->connect(name_button,SIGNAL(clicked(bool)),this,SLOT(slot_getName()));

void InputDialogGui::slot_getName()	//设置槽函数实现功能
{
    //打开文本输入框,获取得文本,设置到label中
    bool ok = false;
    QString name = QInputDialog::getText(this,"文本输入框","请输入姓名:",QLineEdit::Normal,"张 三",&ok);
    if(ok && !name.trimmed().isEmpty()) //如果 用户点击了确定
        name_label->setText(name);		//通过框的设置函数,将获得的名字赋给框
}
//下面三个分别实现
	//年龄(选项输入框getItem),性别(整型输入框getInt),身高(浮点型输入框getDouble)
void InputDialogGui::slot_getSex()		//1.年龄(选项输入框getItem)
{
    QStringList sexlist;
    sexlist.push_back("男");
    sexlist.push_back("女");
    sexlist.push_back("人妖");
    bool ok = false;
    QString sex = QInputDialog::getItem(this,"选项输入框","请选择性别:",sexlist,1,false,&ok);
    if(ok)
        sex_label->setText(sex);
}
void InputDialogGui::slot_getAge()		//2.性别(整型输入框getInt)
{
    bool ok = false;
    int age = QInputDialog::getInt(this,"整型输入框","请输入年龄:",24,1,300,2,&ok);
    if(ok)
        age_label->setText(QString::number(age));
}
void InputDialogGui::slot_getHeight()	//3.身高(浮点型输入框getDouble)
{
    bool ok = false;
    qreal height = QInputDialog::getDouble(this,"浮点型输入框:","请输入身高:",150,1,300,1,&ok);
    if(ok)
        height_label->setText(QString::number(height));
}



#include <QMessageBox>  //标准消息对话框
    QPushButton *question_button = new QPushButton(tr("question"));
   this->connect(question_button,SIGNAL(clicked(bool)),this,SLOT(slot_question()));
void MessageBoxGui::slot_question()
{
    int button = QMessageBox::question(this,tr("question message box"),tr("are you close file?"),QMessageBox::Ok | QMessageBox::Cancel);
    if(button == QMessageBox::Ok)   //表示用户点击了OK按钮
        messlabel->setText(tr("question/ok"));      //在实际使用中,应该实现实际功能
    else if(button == QMessageBox::Cancel)  //表示用户点击了cancel按钮
        messlabel->setText(tr("question/cancel"));
}	//以上未系统的消息对话框

//自定义的消息对话框
    QPushButton *constom_button = new QPushButton(tr("constom"));
	this->connect(constom_button,SIGNAL(clicked(bool)),this,SLOT(slot_comstum()));
void MessageBoxGui::slot_comstum()	//利用槽函数自定义消息对话框
{
    //1.创建消息对话框对象
    QMessageBox constom_mbox;
    //2.设置对话框的属性
    constom_mbox.setWindowTitle(tr("comstum message box"));
    constom_mbox.setIconPixmap(QPixmap("://images/linuxredhat.png"));
    constom_mbox.setText(tr("this is my comstum message box"));
    //3.添加按钮
    QPushButton *lock_button = constom_mbox.addButton(tr("lock"),QMessageBox::ActionRole);
    QPushButton *unlock_button = constom_mbox.addButton(tr("unlock"),QMessageBox::ActionRole);
    QPushButton *cancel_button = constom_mbox.addButton(QMessageBox::Cancel);
    //4.运行
//    constom_mbox.show();        //error,无法判断用户点击的按钮
    constom_mbox.exec();        //对于dialog及子类的显示必须调用exec();
    //5.获取用户点击的按钮,判断
    QAbstractButton *button = constom_mbox.clickedButton(); //获取用户点击的按钮,
    if(button == lock_button)
        messlabel->setText(tr("constum/lock"));
    else if(button == unlock_button)
        messlabel->setText(tr("constum/unlock"));
    else if(button == cancel_button)
        messlabel->setText(tr("constum/cancel"));
}

时间:

#include <QDateTimeEdit>    //日期时间编辑器
	提供了一个部件,用于编辑日期和时间。
    通过使用键盘或箭头键来增加和减少日期和时间值。
    日期和时间的格式按照setDisplayFormat()设置的显示。

    // 设置日期时间格式
    QDateTimeEdit *dateTimeEdit = new QDateTimeEdit(this);
	QDateTimeEdit *dateTimeEdit2 = new QDateTimeEdit(QDateTime::currentDateTime(), this);
	QDateTimeEdit *dateEdit = new QDateTimeEdit(QDate::currentDate(), this);
	QDateTimeEdit *timeEdit = new QDateTimeEdit(QTime::currentTime(), this);
    dateTimeEdit->setDisplayFormat("yyyy-MM-dd HH:mm:ss");
    dateTimeEdit2->setDisplayFormat("yyyy/MM/dd HH-mm-ss");
    dateEdit->setDisplayFormat("yyyy.M.d");
    timeEdit->setDisplayFormat("H:mm");
    yyyy:年,4个数表示。 
    MM:月,01-12。 
    dd:日,01-31。 
    HH:时,00-23。 
    mm:分,00 - 59。 
    ss:秒,00-59。

        
QDateEdit和QTimeEdit均继承自QDateTimeEdit,许多特性和功能都有QDateTimeEdit提供。
不要用QDateEdit来设置或获取时间,也不要用QTimeEdit来设置或获取日期。如果要同时操作日期时间,请使用QDateTimeEdit。
    //dateEdit->setDisplayFormat("yyyy/MM/dd");
    //timeEdit->setDisplayFormat("HH:mm:ss");
//时间编辑器
#include <QTimeEdit>
	time:保存了部件的显示时间。
    minimumTime:定义了用户可以设置的最小时间。
    maximumTime:定义了用户可以设置的最大时间。
    displayFormat:包含了一个字符串用于格式化时间
	QTimeEdit *timeEdit = new QTimeEdit(QTime::currentTime(), this);

//日期控件
#include <QDateEdit>   		
	date:保存了部件的显示日期。
    minimumDate:定义了用户可以设置的最小日期。
    maximumDate:定义了用户可以设置的最大日期。
    displayFormat:包含了一个字符串用于格式化日期。
	QDateEdit *dateEdit = new QDateEdit(QDate::currentDate(), this);

//日期时间       
#include <QDateTime>    
	QDateTime dateTime = dateEdit->dateTime();   

//日期类
#include <QDate>   			
	QDate date = dateEdit->date();

//时间类
#include <QTime>   			
	QTimeEdit *timeEdit;							//声明
    timeEdit = new QTimeEdit(this);					//构造控件
    timeEdit->setGeometry(QRect(50,50,120,25));    //位置
    QDateTime sysTime = QDateTime::currentDateTime();//获取系统时间
    //获取时分秒以“:”号拆分赋予 list 数组
    QStringList list = sysTime.toString("hh:mm:ss").split(':');
    //将时分秒绑定控件 timeEdit- >setTime(QTime(list[0].toInt(),list[1].toInt(),list[2].toInt()));

    bdate_edit_1->setDate(bdate);   				 //设置日期
    bdate_edit_1->setDisplayFormat("yyyy年M月dd日");   //设置日期显示格式
    bdate_edit_1->setCalendarPopup(true);  			 //弹出日历

	//1.获取时间并转化为字符串
    QTime time = QTime::currentTime();
    QString tim_str = time.toString("hh:mm");
    //2.根据isshow控制符来决定是否显示:
    if(isshow)
        tim_str[2] = ':';
    else
        tim_str[2] = ' ';
    //3.显示时间字符串
    this->display(tim_str);

//实时更新时间
#include <QTimer>				
 	QTimer *timer;				//声明
	timer = new QTimer;
	connect(timer,SIGNAL(timeout()),this,SLOT(timerTime()));
	
	void MainWindow::timerTime(){
    QDateTime sysTime = QDateTime::currentDateTime();//获取系统时间
    label->setText(sysTime.toString());
    }

控件:

QLCDNumber控件用于显示一个LCD数字。
它可以显示几乎任意大小的数字。可以显示十进制、十六进制、八进制或二进制数。很容易使用display()槽连接到数据源,这个槽可以被任何五个参数类型的数据源重载。
当显示范围以外的数据时,就会发射overflow()信号。返回可以通过setDigitCount()来设置,但是setSmallDecimalPoint() 也会影响它。如果显示设置为十六进制、八进制或二进制,就会显示整数等效值

窗口:

1.设置窗口标题,大小
this->setWindowTitle("标准对话框示例");  //设置窗口标题   
this->setWindowTitle("Qt5.1 窗体应用");//窗体标题
this->setMaximumSize(300,300);//窗体最大 300*300
this->setMinimumSize(300,300);//窗体最小 300*300
2.窗口位置大小
    

菜单:

Qt中要建立菜单,有三个类很重要:
QMenuBar(QWidget * parent = 0)
QMenu(QWidget * parent = 0)
QMenu(const QString & title, QWidget * parent = 0)

QAction(QObject * parent)
QAction(const QString & text, QObject * parent)
QAction(const QIcon & icon, const QString & text, QObject * parent)

QMenuBar: 就是所有窗口的菜单栏,在此基础上添加不同的QMenu和QAction
QMenu: 菜单栏里面菜单,可以显示文本和图标,但是并不负责执行操作,有点类似label的作用
QAction: Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示。QAction才是真正负责执行操作的部件。

在这里插入图片描述

二.布局管理器:

所有QWidget子类可以使用布局来管理他们的子控件。QWidget::setLayout()函数可以为一个控件布局。当通过这种方式布局以后,它负责以下任务:
    布置子控件。
    最高层窗口可感知的默认大小。
    最高层窗口可感知的最小大小。
    调整大小的处理。
    当内容改变的时候自动更新: 
    字体大小、文本或者子控件的其它内容。
    隐藏或者显示子控件。
    移除一些子控件。
    
布局:
//网格布局
QGridLayout:把子窗口排列在一个二维的网格中,窗口可占据多个单元格。
 	QGridLayout *left_layout = new QGridLayout;
    left_layout->addWidget(lable_1,0,0);		//lable_1   nameedit
    left_layout->addWidget(nameedit,0,1);		//lable_2	sex_hlayout
    left_layout->addWidget(lable_2,1,0);
    left_layout->addLayout(sex_hlayout,1,1);
   
//竖直布局        
QVBoxLayout:把子窗口从上到下排列在一个垂直列上。
	QVBoxLayout *right_layout = new QVBoxLayout;
    right_layout->addLayout(head_layout);
    right_layout->addWidget(label_10);
    right_layout->addWidget(indiv_edit);

//水平布局
QHBoxLayout:把子窗口从左到右排列在一个水平行上。
	sex_hlayout->addWidget(raidobutton_1);
    sex_hlayout->addWidget(raidobutton_2);
    sex_hlayout->addStretch();	//添加了一个伸缩空间
    //在第一个控件之前添加伸缩,这样所有的控件就会居右显示。
	//在最后一个控件之后添加伸缩,这样所有的控件就会居左显示。
	//在第一个控件之前、最后一个控件之后添加伸缩,这样所有的控件就会居中显示。
	//在每一个控件之间都添加伸缩,这样所有的控件之间的间距都会相同。

//表单布局
QFormLayout:管理输入型控件和关联的标签组成的那些Form表单。
    把子窗口按照标签-输入框的形式排列在两列。    
    两列和若干行组成的形式时,QFormLayout更为方便些
    多行多列,应毫不犹豫的尽量使用栅格布局QGridLayout
    QFormLayout *pLayout = new QFormLayout();
    pLayout->addRow(QStringLiteral("用户名:"), pUserLineEdit);
    pLayout->addRow(QStringLiteral("密码:"), pPasswordLineEdit);
    pLayout->addRow(QStringLiteral("验证码:"), pVerifyLineEdit);
    pLayout->setSpacing(10);
    pLayout->setMargin(10);
    setLayout(pLayout);
通过addRow()来创建一个带有给定文本的QLabel及QWidget控件行,它们可以自动的设置为伙伴关系。

//控制表单行的显示策略
QFormLayout::RowWrapPolicy枚举:
	QFormLayout::DontWrapRows	0	输入框始终在标签旁边
	QFormLayout::WrapLongRows 1	标签有足够空间适应,最小大小比可用空间大,输入框会被换到下一行
    QFormLayout::WrapAllRows	2	输入框始终在标签下边
    
//窗体布局    
QstackLayout	

间隔器:
    水平间隔器:Horizontal Spacer
    竖直间隔器:Vertical Spacer    

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值