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

来源:互联网 发布:知轩藏书网 编辑:程序博客网 时间:2024/06/05 03:46

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();}

这里写图片描述

原创粉丝点击