Qt的读文件,json解析的操作和主界面的跳转(四)

Json格式


json对象: {"key":"value", "key2", "value2"}

{
    "KSF": "陈丽",
    "Kevin": "Apple",
    "Leilei": "loveHanMeiMei",
    "Licy": "red",
    "Lucy": "HelloWorld",
    "Tom": "123456"
}

json数组格式: ["value", "value2", "value3"]

[
    "一汽大众", 
    "二汽神龙", 
    "上海大众"
]

解码流程图
这里写图片描述

一,读文件操作

#include <QFileDialog>
#include <QFileDevice>

#include <QFile>
#include <QMessageBox>

//格式转换
#include <QTextCodec>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //打开文件路径
    QString filepath = QFileDialog::getOpenFileName(this, "D:/");

    QFile file(filepath);

    //以读写文件
    bool bs =  file.open(QIODevice::ReadWrite);

    if (!bs)
    {
        QMessageBox::information(this, "file", "Not file");
        return;
    }
    //读取文本
    QByteArray array = file.readAll();

#if 0
    // 判断是否读到结束
    while (!file.atEnd())
    {
         QByteArray str = file.readLine();
         array += str;
    }
#endif
     QMessageBox::information(this, "file", array);

#if 0
     //rgb格式转换utf-8
    QTextCodec* codec =  QTextCodec::codecForName("rgb");

    QString str = codec->toUnicode(array);
#endif
     // 关闭文件
     file.close();

}

这里写图片描述

二,文件操作

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QDebug>
#include <QMessageBox>

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

    //打开文件路径
    QString filepath = QFileDialog::getOpenFileName(this, "D:/");

    QFile file(filepath);

    bool bs =   file.open(QIODevice::ReadWrite);

    QByteArray array = file.readAll();
    //QBAray
    QJsonDocument doc = QJsonDocument::fromJson(array);

    //判断是否json数组还是json对象
    if (doc.isArray())
    {
        //数组的处理
    }else if (doc.isObject())
    {
        // jsonObject的处理
        QJsonObject obj = doc.object();
        QStringList keys =  obj.keys();

        int i;
        for (i = 0; i < keys.size(); i++)
        {

            QJsonValue value = obj.value(keys.at(i));

            // jsonValue 是什么格式
            if (value.isString())
            {
                QString str = value.toString();
                QMessageBox::information(this, "value", str);

            }
            if (value.isDouble())
            {
                double db = value.toDouble();
                qDebug() << db;
            }

        }
    }

    // 关闭文件
    file.close();


}

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

这里写图片描述

三,json写的操作

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QFileDialog>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>


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


    QJsonObject obj;
    obj.insert("王蓉", "11111111111111");
    obj.insert("杨艳", "222222222222222");
    obj.insert("王盼盼", "33333333333333333");
    obj.insert("陈丽", "444444444444444444");
    QJsonDocument doc(obj);

    //对象转换bytearray数组
    QByteArray bytearray = doc.toJson();

    QFile file("D:/chenli.json");
    bool bs = file.open(QIODevice::WriteOnly);

    if (!bs)
    {

        return;
    }
    //写入文件
    file.write(bytearray);
    //关闭文件
    file.close();

}

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

这里写图片描述

四,移动主窗口的的操作

操作mouse的事件
1. virtual void mousePressEvent(QMouseEvent *event); mouse点击时候的发生
2. virtual void mouseMoveEvent(QMouseEvent *event);mouse移动事件

#include "mytitlebar.h"
#include "ui_mytitlebar.h"
#include <QPixmap>
#include <QMouseEvent>

MyTitleBar::MyTitleBar(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyTitleBar)
{
    ui->setupUi(this);
    //设置logo 图片
    ui->logo->setPixmap(QPixmap(":/images/logo.ico").scaled(40, 40));
    ui->title->setText("baidu");
}

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


//接收父类的窗口
void MyTitleBar::setWinParent(QWidget *parent)
{
     m_parent = parent;
}
//点击时候的事件
void MyTitleBar::mousePressEvent(QMouseEvent *event)
{
     //判断是否是leftbutton事件
     if(event->button() == Qt::LeftButton)
     {
        m_pt = event->globalPos() - m_parent->geometry().topLeft();
     }
}

void MyTitleBar::mouseMoveEvent(QMouseEvent *event)
{
    //判断事件
    if (event->buttons() & Qt::LeftButton)
    {
        //移动
       m_parent->move(event->globalPos() - m_pt);
    }
}
//关闭窗口
void MyTitleBar::on_closeBtn_clicked()
{
    m_parent->close();
}
//发小
void MyTitleBar::on_setbtn_clicked()
{
    m_parent->showMinimized();
}

主要的事件

主窗口的传递到子窗口的事件 主窗口调用

ui-> 控件->setWinParent(this);

//在子窗口中是一个接口
 void setWinParent(QWidget *parent);
#include "mytitlebar.h"
#include "ui_mytitlebar.h"
#include <QPixmap>
#include <QMouseEvent>

MyTitleBar::MyTitleBar(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyTitleBar)
{
    ui->setupUi(this);
    //设置logo 图片
    ui->logo->setPixmap(QPixmap(":/images/logo.ico").scaled(40, 40));
    ui->title->setText("baidu");
}

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


//接收父类的窗口
void MyTitleBar::setWinParent(QWidget *parent)
{
     m_parent = parent;
}
//点击时候的事件
void MyTitleBar::mousePressEvent(QMouseEvent *event)
{
     //判断是否是leftbutton事件
     if(event->button() == Qt::LeftButton)
     {
        m_pt = event->globalPos() - m_parent->geometry().topLeft();
     }
}

void MyTitleBar::mouseMoveEvent(QMouseEvent *event)
{
    //判断事件
    if (event->buttons() & Qt::LeftButton)
    {
        //移动
       m_parent->move(event->globalPos() - m_pt);
    }
}
//关闭窗口
void MyTitleBar::on_closeBtn_clicked()
{
    m_parent->close();
}
//发小
void MyTitleBar::on_setbtn_clicked()
{
    m_parent->showMinimized();
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值