智能家居项目

先规划好做什么功能,接下来我们走一步介绍一步,第一肯定要是登录界面,规范好。界面可以添加背景图,我就省略了这个,直接就是简易版,账号密码在代码中固定死,然后用IF判断如果正确,则显示登录成功。界面制作我是用手拖方式进行制作,没用手写代码实现,

用if判断,然后进行密码加密,

界面制作后,接下来就是控制小灯,风扇等,

如图所示,我点击相对于的开关,灯或者风扇就会有反应,这我用的是图片切换,具体什么意思呢,请看下下代码

我就直接用if判,如果我按了开,就会显示第一张图片,当我在此按下就会显示关,就会显示另外关的图片,就起到了开关的效果,当然其余的都是这样,所有的线,图片,按钮,都是拖的,自己手写也可以,手写的优点就是随心随意,但是效率较低,比较慢。而且,对准位置参数,对我来说很费时。

接下来就是视频监控

当我开启视频就是这样子,调用摄像头,进行拍照保存,我这个截图拍照保存整合在一个槽函数内了,

如下代码,F:\\luping是保存照片的路径

音乐播放器:

先去下载MP3歌曲,存入指定文件,然后添加按钮,就会打开文件夹,添加指定文件歌曲,然后播放,歌曲,下一首,上一首,由槽函数进行连接。

TCP连接;客户端连接服务端

我服务端先打开,然后,客户端进行连接,连接成功客户端先给服务端发送ip地址,提醒服务端客服端上线,然后就可以进行数据接收,然后服务端通过客户端发来的数据对我的开关进行操作,这就实现了客户端对服务端的操作。

以下就是整个服务端代码。

下面是显示文本日期以及时间的代码

//这是界面代码(Mainwindow.h)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

    void on_checkBox_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

//这是界面的MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "znjj_2.h"
#include <QMessageBox>
#include <QMenu>
#include <QAction>
#include <QToolBar>
#include <QDatetime>
#include <QString>
#include <QIODevice>
#include <QFileDialog>
#include <QColorDialog>
#include <QFontDialog>
#include <QDebug>
#include <QLabel>
#include <QApplication>
#include <QPainter>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QDateTime time=QDateTime::currentDateTime();
    QString timeStr=time.toString("yyyy-MM-dd hh:mm:ss");
    qDebug()<<timeStr<<endl;
    // 标签
    QLabel* linelabel = new QLabel("行");
    ui->statusBar->addWidget(linelabel);

    QLabel* rowlabel = new QLabel("列");
    ui->statusBar->addWidget(rowlabel);

    QLabel* curtime = new QLabel(timeStr);
    ui->statusBar->addWidget(curtime);

    QLabel* label4 = new QLabel("100%   ");
    ui->statusBar->addWidget(label4);

    QLabel* label5 = new QLabel("Windows       ");
    ui->statusBar->addWidget(label5);

    QLabel* label6 = new QLabel("UTF-8         </a>");
    ui->statusBar->addWidget(label6);



}

MainWindow::~MainWindow()
{
    delete ui;
}



void MainWindow::on_pushButton_clicked()
{
    if(ui->lineEdit_2->text() == "1" && ui->lineEdit->text() =="1")
    {
         QMessageBox::information(this,"提示","登录成功");
         this->close();
         znjj_2* b = new znjj_2();
         b->show();
    }
    else
    {
         QMessageBox::information(this,"提示","登录失败");
    }
}


//密码加密
void MainWindow::on_checkBox_clicked()
{
    if(ui->checkBox->isChecked())
    {
        ui->lineEdit->setEchoMode(ui->lineEdit->Password);
    }
    else
    {
         ui->lineEdit->setEchoMode(ui->lineEdit->Normal);
    }
}
//这是.cpp实现的全部代码(znjj_2.cpp)
#include "znjj_2.h"
#include "ui_znjj_2.h"
#include <QPainter>
#include <QPen>
#include <QMovie>
#include <QPixmap>

#include <QVideoWidget>
#include <QCamera>
#include <QCameraInfo>
#include <QDir>
#include <QDebug>
#include <QFileDialog>

#include <QTableWidget>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QStringList>
#include <QFileDialog>

znjj_2::znjj_2(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::znjj_2)
{
    ui->setupUi(this);


     setWindowTitle(tr("服务器"));//服务端

    //音乐播放器
   player = new QMediaPlayer(this);
   playlist = new QMediaPlaylist;
   playlist->addMedia(QUrl("F:\\QT111\\music\\lone.mp3"));
   playlist->setPlaybackMode(QMediaPlaylist::Loop);
   player->setPlaylist(playlist);



    QList<QCameraInfo> infos2 = QCameraInfo::availableCameras();
    foreach (QCameraInfo info, infos2)
    {
        qDebug()<<info.deviceName()<<":"<<info.description();
      ui->comboBox->addItem(info.deviceName());
    }
}

znjj_2::~znjj_2()
{
    delete ui;
}

//厨房灯按钮
void znjj_2::on_pushButton_clicked()
{
    if(ui->pushButton->isCheckable()){        //切换按钮状态
               ui->pushButton->setCheckable(false);
            }else{
               ui->pushButton->setCheckable(true);
            }

            if(ui->pushButton->isCheckable()){        //切换按钮标签字
                ui->pushButton->setText("开");
                ui->label_10->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));
            }else{
                ui->pushButton->setText("关");
                ui->label_10 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
            }
}
//厨房风扇按钮
void znjj_2::on_pushButton_13_clicked()
{
    if(ui->pushButton_13->isCheckable()){        //切换按钮状态
               ui->pushButton_13->setCheckable(false);
            }else{
               ui->pushButton_13->setCheckable(true);
            }

            if(ui->pushButton_13->isCheckable()){        //切换按钮标签字
                ui->pushButton_13->setText("开");
                ui->label_11->setPixmap(QPixmap("://C:/Users/daizhifei/Pictures/动态风扇.gif"));

            }else{
               ui->pushButton_13->setText("关");
               ui->label_11 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/风扇动图.gif"));
            }

}
//餐厅开关
void znjj_2::on_pushButton_3_clicked()
{
    if(ui->pushButton_3->isCheckable()){        //切换按钮状态
               ui->pushButton_3->setCheckable(false);
            }else{
               ui->pushButton_3->setCheckable(true);
            }

            if(ui->pushButton_3->isCheckable()){        //切换按钮标签字
                ui->pushButton_3->setText("开");
                ui->label_12->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));

            }else{
                ui->pushButton_3->setText("关");
                ui->label_12 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
            }
}
//卫生间灯光按钮
void znjj_2::on_pushButton_17_clicked()
{
    if(ui->pushButton_17->isCheckable()){        //切换按钮状态
               ui->pushButton_17->setCheckable(false);
            }else{
               ui->pushButton_17->setCheckable(true);
            }

            if(ui->pushButton_17->isCheckable()){        //切换按钮标签字
                ui->pushButton_17->setText("开");
                 ui->label_13->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));

            }else{
                ui->pushButton_17->setText("关");
                ui->label_13 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
            }
}
//卫生间风扇按钮
void znjj_2::on_pushButton_18_clicked()
{
    if(ui->pushButton_18->isCheckable()){        //切换按钮状态
               ui->pushButton_18->setCheckable(false);
            }else{
               ui->pushButton_18->setCheckable(true);
            }

            if(ui->pushButton_18->isCheckable()){        //切换按钮标签字
                ui->pushButton_18->setText("开");
                ui->label_14->setPixmap(QPixmap("://C:/Users/daizhifei/Pictures/动态风扇.gif"));

            }else{
                ui->pushButton_18->setText("关");
                ui->label_14 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/风扇动图.gif"));
            }
}
//次卧1灯开关按钮
void znjj_2::on_pushButton_19_clicked()
{
    if(ui->pushButton_19->isCheckable()){        //切换按钮状态
               ui->pushButton_19->setCheckable(false);
            }else{
               ui->pushButton_19->setCheckable(true);
            }

            if(ui->pushButton_19->isCheckable()){        //切换按钮标签字
                ui->pushButton_19->setText("开");
                ui->label_15->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));

            }else{
                ui->pushButton_19->setText("关");
                ui->label_15 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
            }
}
//次卧2灯光按钮
void znjj_2::on_pushButton_20_clicked()
{
    if(ui->pushButton_20->isCheckable()){        //切换按钮状态
               ui->pushButton_20->setCheckable(false);
            }else{
               ui->pushButton_20->setCheckable(true);
            }

            if(ui->pushButton_20->isCheckable()){        //切换按钮标签字
                ui->pushButton_20->setText("开");
                ui->label_16->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));

            }else{
                ui->pushButton_20->setText("关");
                ui->label_16 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
            }
}
//书房灯开关按钮
void znjj_2::on_pushButton_14_clicked()
{
    if(ui->pushButton_14->isCheckable()){        //切换按钮状态
               ui->pushButton_14->setCheckable(false);
            }else{
               ui->pushButton_14->setCheckable(true);
            }

            if(ui->pushButton_14->isCheckable()){        //切换按钮标签字
                ui->pushButton_14->setText("开");
                ui->label_17->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));

            }else{
                ui->pushButton_14->setText("关");
                ui->label_17 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
            }
}
//书房风扇开关按钮
void znjj_2::on_pushButton_15_clicked()
{
    if(ui->pushButton_15->isCheckable()){        //切换按钮状态
               ui->pushButton_15->setCheckable(false);
            }else{
               ui->pushButton_15->setCheckable(true);
            }

            if(ui->pushButton_15->isCheckable()){        //切换按钮标签字
                ui->pushButton_15->setText("开");
                ui->label_18->setPixmap(QPixmap("://C:/Users/daizhifei/Pictures/动态风扇.gif"));
            }else{
                ui->pushButton_15->setText("关");
                ui->label_18 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/风扇动图.gif"));
            }
}
//客厅灯光按钮
void znjj_2::on_pushButton_16_clicked()
{
    if(ui->pushButton_16->isCheckable()){        //切换按钮状态
               ui->pushButton_16->setCheckable(false);
            }else{
               ui->pushButton_16->setCheckable(true);
            }

            if(ui->pushButton_16->isCheckable()){        //切换按钮标签字
                ui->pushButton_16->setText("开");
                ui->label_19->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));
            }else{
                ui->pushButton_16->setText("关");
                ui->label_19 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
            }
}
//客厅风扇开关按钮
void znjj_2::on_pushButton_23_clicked()
{
    if(ui->pushButton_23->isCheckable()){        //切换按钮状态
               ui->pushButton_23->setCheckable(false);
            }else{
               ui->pushButton_23->setCheckable(true);
            }

            if(ui->pushButton_23->isCheckable()){        //切换按钮标签字
                ui->pushButton_23->setText("开");
                ui->label_20->setPixmap(QPixmap("://C:/Users/daizhifei/Pictures/动态风扇.gif"));

            }else{
                ui->pushButton_23->setText("关");
                ui->label_20 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/风扇动图.gif"));
            }
}
//主卧灯光按钮
void znjj_2::on_pushButton_21_clicked()
{
    if(ui->pushButton_21->isCheckable()){        //切换按钮状态
               ui->pushButton_21->setCheckable(false);
            }else{
               ui->pushButton_21->setCheckable(true);
            }

            if(ui->pushButton_21->isCheckable()){        //切换按钮标签字
                ui->pushButton_21->setText("开");
                ui->label_21->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));

            }else{
                ui->pushButton_21->setText("关");
                ui->label_21 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
            }
}
//主卧风扇按钮
void znjj_2::on_pushButton_22_clicked()
{
    if(ui->pushButton_22->isCheckable()){        //切换按钮状态
               ui->pushButton_22->setCheckable(false);
            }else{
               ui->pushButton_22->setCheckable(true);
            }

            if(ui->pushButton_22->isCheckable()){        //切换按钮标签字
                ui->pushButton_22->setText("开");
                ui->label_22->setPixmap(QPixmap("://C:/Users/daizhifei/Pictures/动态风扇.gif"));

            }else{
                ui->pushButton_22->setText("关");
                ui->label_22 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/风扇动图.gif"));
            }
}


//视频
void znjj_2::on_start_clicked()
{
        ca2 = new QCamera(ui->comboBox->currentText().toUtf8(),this);
        ui->widget_2->show();
        capture2 = new QCameraImageCapture(ca2);
        connect(capture2,SIGNAL(imageCaptured(int,QImage)),this,SLOT(show_pic(int,QImage)));
        QCameraViewfinder *v2 = new QCameraViewfinder(ui->widget_2);
        v2->resize(ui->widget_2->size());
        ca2->setViewfinder(ui->widget_2);
        v2->show();
        ca2->start();
}
//暂停
void znjj_2::on_stop_clicked()
{
    ca2->stop();
    ui->widget_2->hide();
}
//保存
void znjj_2::on_pushButton_6_clicked()
{
    capture2->capture("F:\\luping");
}

void znjj_2::show_pic(int id,const QImage &preview)
{
    qDebug()<<id;
    QPixmap pix = QPixmap::fromImage(preview);
    pix = pix.scaled(ui->label_25->size());
    ui->label_25->setPixmap(pix);
}



//添加
void znjj_2::on_pushButton_26_clicked()
{
    QStringList music_files=QFileDialog::getOpenFileNames(this,"选择音乐文件","F:/QT111/music/lone.mp3");

        //去重
        for(int i = 0;i<ui->listWidget->count();i++)
        {
            for(int j = 0;j<music_files.count();j++)
            {
                if(ui->listWidget->item(i)->text()==music_files.at(j))
                {
                    music_files.removeAt(j);
                    break;
                }
            }
        }
        //如果无添加文件,直接返回
        if(music_files.isEmpty())
            return ;

        for(int i = 0;i<music_files.count();i++)
        {
            QString file = music_files.at(i);
            //吧文件加到播放列表
            playlist->addMedia(QUrl::fromLocalFile(file));
        }
        ui->listWidget->addItems(music_files);
        //定位
        ui->listWidget->setCurrentRow(0);
}


//暂停/继续
void znjj_2::on_pushButton_24_clicked()
{
    if(player->state()==QMediaPlayer::PlayingState)
    {
        //暂停
        player->pause();
        ui->pushButton_24->setText("继续");
    }
    else if(player->state()==QMediaPlayer::PausedState)
    {
        //继续
        player->play();
        ui->pushButton_24->setText("暂停");
    }
}
//上一曲
void znjj_2::on_pushButton_9_clicked()
{
    int row = ui->listWidget->currentRow();
    if(row == 0)
        row = ui->listWidget->count();
        row--;
        ui->listWidget->setCurrentRow(row);
        //设置playlist
        playlist->setCurrentIndex(row);
        player->play();
        player->setVolume(ui->verticalSlider->value());
        ui->pushButton_24->setText("暂停");
        ui->pushButton_24->setEnabled(true);
}
//下一曲
void znjj_2::on_pushButton_8_clicked()
{
    int row = ui->listWidget->currentRow();
    if(row == ui->listWidget->count()-1)
        row = 0;
    else
        row++;
        ui->listWidget->setCurrentRow(row);
        playlist->setCurrentIndex(row);
        player->play();
        player->setVolume(ui->verticalSlider->value());
        ui->pushButton_24->setText("暂停");
        ui->pushButton_24->setEnabled(true);
}
//删除
void znjj_2::on_pushButton_27_clicked()
{
    int row = ui->listWidget->currentRow();

    QListWidgetItem* item = ui->listWidget->takeItem(row);

    if(item)
    {
        delete item;
    }

    playlist->removeMedia(row);
}
//清空
void znjj_2::on_pushButton_28_clicked()
{
    ui->listWidget->clear();
    playlist->clear();
}
//播放
void znjj_2::on_pushButton_5_clicked()
{
    int row = ui->listWidget->currentRow();
    playlist->setCurrentIndex(row);
    player->play();
    player->setVolume(ui->verticalSlider->value());
    ui->pushButton_24->setText("暂停");
    ui->pushButton_24->setEnabled(true);
}


//声音文本

void znjj_2::on_verticalSlider_sliderMoved(int position)
{
    player->setVolume(position);
    ui->label_vol->setText(QString("音量:%1").arg(position));
    //ui->label_vol->setText(QString("音量:%1").arg(position));

}

void znjj_2::on_horizontalSlider_sliderMoved(int position)
{
    player->setPosition(position);
    //ui->label_vol->setText(QString("音量:%1").arg(pos));
}
//双击播放
void znjj_2::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
    int row = ui->listWidget->currentRow();
    playlist->setCurrentIndex(row);
    player->play();
    player->setVolume(ui->verticalSlider->value());
    ui->pushButton_24->setText("暂停");
    ui->pushButton_24->setEnabled(true);
}

//启动服务器
void znjj_2::on_pushButton_4_clicked()
{
    //第一步:创建对象  QTcpserver对象
    m_server= new QTcpServer(this);
    //第二步:监听 listen函数
    unsigned short port = ui->lineEdit->text().toShort();
    m_server->listen(QHostAddress::AnyIPv4 ,port);
    //第三步:处理信号槽函数处理 (槽函数中获取客户端的socket)
    QObject::connect(m_server,&QTcpServer::newConnection,this,&znjj_2::ClientConnect);
    //   nextpendingconnction函数可以获取到客户端的socket,也就是QTCPsocket对象
    //第四步:如果连接上了,设置按钮为灰色
    ui->pushButton_4->setEnabled(false);
}
//客户端连接后响应
void znjj_2::ClientConnect()
{
    //返回客户端的tcp
    m_tcp = m_server->nextPendingConnection();
    //打印下客户端的ip地址
    QHostAddress addr =  m_tcp->peerAddress();
    ui->textEdit->append(addr.toString());
    connect(m_tcp,&QTcpSocket::readyRead,this,&znjj_2::readData );
    connect(m_tcp,&QTcpSocket::disconnected ,this,&znjj_2::Clientdisconnect );
}

//发送
void znjj_2::on_pushButton_7_clicked()
{
    //使用write函数,QTcpsocket对象
    QString temp = ui->textEdit_2->toPlainText();//获取textedit的文本
    char buf[128]={0};
    m_tcp->write(buf);
    if(strlen(buf) != 0 )
    {
        ui->textEdit->append(buf);
    }
    ui->textEdit_2->clear();
}

//服务器接受数据
void znjj_2::readData()
{
    QString temp = m_tcp->readAll();
    if(!temp.isNull())
    {
        ui->textEdit->append(temp);
    }
}
//客户端断开连接
void znjj_2::Clientdisconnect()
{

    ui->textEdit->append("客户端断开连接");
    m_tcp->close();
    ui->pushButton->setEnabled(true);
}
//这是智能家居主要.h代码(znjj_2)
#ifndef ZNJJ_2_H
#define ZNJJ_2_H
#include <QWidget>
#include <QCameraInfo>
#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QPixmap>
#include <QTcpServer>
#include <QTcpSocket>
#include <QMediaPlaylist>
#include <QStringList>
#include <QDir>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QListWidgetItem>
namespace Ui {
class znjj_2;
}

class znjj_2 : public QWidget
{
    Q_OBJECT

public:
    explicit znjj_2(QWidget *parent = 0);
    ~znjj_2();
    QTcpServer* m_server;//服务器对象
    QTcpSocket* m_tcp;//客户端对象

    void paintEvent(const QEvent* event);



private slots:
    void on_pushButton_clicked();

    void on_pushButton_13_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_17_clicked();

    void on_pushButton_18_clicked();

    void on_pushButton_19_clicked();

    void on_pushButton_20_clicked();

    void on_pushButton_14_clicked();

    void on_pushButton_15_clicked();

    void on_pushButton_16_clicked();

    void on_pushButton_23_clicked();

    void on_pushButton_21_clicked();

    void on_pushButton_22_clicked();

    void on_pushButton_6_clicked();

    void on_pushButton_8_clicked();

    void on_start_clicked();

    void on_stop_clicked();

    void show_pic(int id,const QImage &preview);




    void addItem(QString name);//添加tableWidget


//点击连接服务器
    void on_pushButton_4_clicked();

    void ClientConnect();

    void readData();

//    void Clientdisconnect();
    void on_pushButton_5_clicked();

    void on_pushButton_9_clicked();

    //void on_pushButton_25_clicked();

    //void on_pushButton_7_clicked();

    void on_pushButton_26_clicked();

    void on_pushButton_24_clicked();

    void on_pushButton_27_clicked();

    void on_pushButton_28_clicked();

    void on_listWidget_itemDoubleClicked(QListWidgetItem *item);

    void on_verticalSlider_sliderMoved(int position);

    void on_horizontalSlider_sliderMoved(int position);

    void on_verticalSlider_valueChanged(int value);

    void on_textEdit_destroyed();

    void on_pushButton_7_clicked();


    void Clientdisconnect();

private:
    Ui::znjj_2 *ui;
//     QTcpSocket* m_tcp;

    QCamera* ca2;
    QCameraImageCapture* capture2;
    //Ui::znjj_2 *ui;
    //播放器
    QMediaPlayer* player;
    //播放列表
    QMediaPlaylist* playlist;
    //记录当前媒体周期
    QString music_duration;


};

#endif // ZNJJ_2_H
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值