使用QT制作一个界面跳转(主要实现天气获取,进度条读取,定时器显示时间)

43 篇文章 1 订阅

1.显示主界面

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "login.h"
#include <QFile>
#include <QFileDialog>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void ProgressShow(int value);

private slots:

    void on_PBstart_clicked();

    void on_PBover_clicked();

    void on_checkBox_2_clicked();

    void on_PBclear_clicked();

    void timerUpdate();

    void Reapper();

    void on_Plogin_clicked();

    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
    bool flag = false;
    int startime;
    int writeTime;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QString"
#include "QTimer"
#include "qdebug.h"
#include "QMessageBox"
#include <QtNetwork>
#include <QNetworkAccessManager>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowTitle("主界面");

    QTimer* timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(timerUpdate()));//连接定时器函数

    timer->start(500);
}

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



void MainWindow::on_PBstart_clicked()
{
    if(ui->checkBox->checkState())//判断是否选择写入
    {
        QString text = ui->inputEdit->text();
        ui->textEdit->append(text);
        ui->inputEdit->clear();//写入后清除
    }
    else {
//      QString text = "input error";
//      ui->textEdit->setText(text);
      QMessageBox::information(this, QString::fromLocal8Bit("warning"),QString::fromLocal8Bit("plase check input radio"));
    }
}

void MainWindow::on_PBover_clicked()
{
    close();
}



void MainWindow::on_checkBox_2_clicked()
{
    if(ui->checkBox_2->checkState())//判断是否选择写入
    {
        QDateTime time = QDateTime::currentDateTime();   //获取当前时间

        writeTime = time.toTime_t();                     //将当前时间转为时间戳

        ui->curltime1->setDateTime(time);

        ui->curltime->setDateTime(time);
    }
    if(ui->checkBox_2->isChecked()) //判断是否选中
    {
      flag = true;
    }
    else
    {
        flag = false;
        ui->progressBar->setValue(0);//若取消选中则重置进度条
    }
}


void MainWindow::on_PBclear_clicked()
{
    ui->textEdit->clear();//清空文本框
    ui->PBstart->setText("输入");
    ui->PBstart->setEnabled(true);
}

void MainWindow::timerUpdate()
{
    QDateTime time = QDateTime::currentDateTime();

    QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");

    startime = time.toTime_t();

    ui->datatime->setText(str);
    //qDebug()<<"flag = "<<flag;
    if(flag)//当时间超出选中时间10秒后自动关闭
    {
        int temp = startime - writeTime;
        ProgressShow(temp);
        if(temp >= 10)
        {
           QMessageBox::warning(this,QString::fromStdString("警告"),QString::fromStdString("超出设置时间"));
           close();
        }
    }
}

void MainWindow::ProgressShow(int value)//进度条设置
{
    ui->progressBar->setRange(0,100);
    ui->progressBar->setValue(value*10);
}

void MainWindow::Reapper()
{
    qDebug()<<"mainwindow show.";
    this->show();
}


void MainWindow::on_Plogin_clicked()
{
    flag = false;
    Login w;
    w.show();
    w.exec();
    //this->hide();
    this->close();
}

void MainWindow::on_pushButton_clicked()
{
    ui->PBstart->setText("停止");
    ui->PBstart->setEnabled(false);
    QString str = ui->pushButton->text();
    if(str == "打开") {
        QString filename = QFileDialog::getOpenFileName(this,"open","./","Text file(*.*)");
        if(filename == ""){
            return ;
        }
        else {
            QFile file(filename);
            file.open(QIODevice::ReadOnly | QIODevice::Text);
            QTextStream textStream(&file);
            while(!textStream.atEnd())
            {
             ui->textEdit->setPlainText(textStream.readAll());
            }
            ui->textEdit->show();
            file.close();
        }
    }
}

 主界面只要实现当时间控制开启定时器10秒后自动结束进程,并同时显示实时时间,并且可以同时从统计框中输入字符到文本框中保存。当点击打开也可直接打开文件显示到文本框中;按下跳转后可以跳到第二个界面。

2.显示第二界面

#ifndef LOGIN_H
#define LOGIN_H

#include <QDialog>
#include <qdebug.h>
#include <QMessageBox>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>

#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>


namespace Ui {
class Login;
}

class Login : public QDialog
{
    Q_OBJECT

public:
    explicit Login(QWidget *parent = 0);
    ~Login();
public slots:
    void jm1();
    int checklegal();
    void replyFinished(QNetworkReply *reply);
    void checkW();
    int find();

private:
    Ui::Login *ui;

signals:
    void  ender();
private slots:

    void on_Pblogin_clicked();
    void on_Pbcance_clicked();

private:
    QNetworkAccessManager* manager;
    QString weather_type;
    QString type;
    QString wendu;
    QString fengli;

};

#endif // LOGIN_H
#include "login.h"
#include "ui_login.h"
#include "mainwindow.h"

Login::Login(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Login)
{
    ui->setupUi(this);
    setWindowTitle("登录");
    MainWindow* mw = new MainWindow;
    connect(this,SIGNAL(ender()),mw,SLOT(Reapper()));
    manager = new QNetworkAccessManager(this);  //新建QNetworkAccessManager对象
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));//关联信号和槽
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(checkW()));//关联信号和槽

}

Login::~Login()
{
    delete ui;
}
void Login::jm1()
{
    emit ender();
    qDebug()<<"ender start.";
}

int Login::checklegal()
{
    //ui->usermd->text().trimmed();
    QString user = ui->usermd->text();
    QString pswd = ui->passwd->text();
    if((user == "huqin")&&(pswd == "123456"))
    {
      QMessageBox::information(this, QString::fromLocal8Bit("info"),QString::fromStdString("登录成功"));
      return 0;
    }
    else {
       QMessageBox::information(this, QString::fromLocal8Bit("error"),QString::fromStdString("请重新登录"));
       return -1;
    }
}


void Login::on_Pblogin_clicked()
{
    int ret = checklegal();
    if(ret == 0){
       close();
    }
    else {//登录失败则清除登录信息
        ui->usermd->clear();
        ui->passwd->clear();
       this->show();
    }

}

void Login::on_Pbcance_clicked()
{

    emit ender();//触发信号
    qDebug()<<"ender start.";
    this->close();
}


void Login::checkW() //点击查询请求天气数据
{
    QString local_city = ui->lineEdit->text().trimmed(); //获得需要查询天气的城市名称
    char quest_array[256] = "http://wthrcdn.etouch.cn/weather_mini?city=";
    QNetworkRequest quest;
    sprintf(quest_array, "%s%s", quest_array, local_city.toUtf8().data());
    quest.setUrl(QUrl(quest_array));
    quest.setHeader(QNetworkRequest::UserAgentHeader, "RT-Thread ART");
    /*发送get网络请求*/
    manager->get(quest);
}

void Login::replyFinished(QNetworkReply *reply)  //天气数据处理槽函数
{
    qDebug() << "recv weather data!!";
    QString all = reply->readAll();

    //ui->textBrowser->setText(all); //将接收到的数据显示出来

    QJsonParseError err;
    QJsonDocument json_recv = QJsonDocument::fromJson(all.toUtf8(), &err);//解析json对象
    qDebug() << err.error;
    if (!json_recv.isNull())
    {
        QJsonObject object = json_recv.object();

        if (object.contains("data"))
        {
            QJsonValue value = object.value("data");  // 获取指定 key 对应的 value
            if (value.isObject())
            {
                QJsonObject object_data = value.toObject();
                if (object_data.contains("forecast"))
                {
                    QJsonValue value = object_data.value("forecast");
                    if (value.isArray())
                    {
                        QJsonObject today_weather = value.toArray().at(0).toObject();
                        weather_type = today_weather.value("type").toString();

                        //QString tuijian = object.value("data").toObject().value("ganmao").toString();
                        QString low = today_weather.value("low").toString();
                        QString high = today_weather.value("high").toString();
                        wendu = low.mid(low.length() - 3, 4) + "~" + high.mid(high.length() - 3, 4);
                        QString strength = today_weather.value("fengli").toString();
                        strength.remove(0, 8);
                        strength.remove(strength.length() - 2, 2);
                        fengli = today_weather.value("fengxiang").toString() + strength;
                        ui->type->setText(weather_type); //显示天气类型
                        ui->wendu->setText(wendu);   //显示温度
                        ui->fengli->setText(fengli); //显示风力
                        //ui->textBrowser2->setText(tuijian);
                    }
                }
            }
        }

    }
    else
    {
        qDebug() << "json_recv is NULL or is not a object !!";
    }
    reply->deleteLater(); //销毁请求对象
}

 只是简单的做一下测试,完善的话还需要加很多。。。。你可以将第二个界面作为主界面登录后再显示第一个界面,这样比较友善,本人太懒。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值