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(); //销毁请求对象
}
只是简单的做一下测试,完善的话还需要加很多。。。。你可以将第二个界面作为主界面登录后再显示第一个界面,这样比较友善,本人太懒。