sourceforge.netにアップデートがあるかどうかをQTアプリがチェックするようにします。これについて私は要求を使用します:https://sourceforge.net/projects/kidbasic/best_release.json このリンクをブラウザに使用すると、いくつかのjson応答が得られます。 したがって、これはコードである:QTは、sourceforge.netにアップデートがあるかどうかを確認するようにアプリケーションを修正します。
app.pro
QT += core gui
QT += network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = app
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
main.cppに
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QPushButton>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void replyFinished(QNetworkReply* reply);
void checkForUpdate(void);
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QWidget * wdg = new QWidget(this);
QPushButton *train_button = new QPushButton(wdg);
train_button->setText(tr("check update"));
setCentralWidget(wdg);
QObject::connect(train_button, SIGNAL(released()), this, SLOT(checkForUpdate()));
}
MainWindow::~MainWindow(){ }
void MainWindow::checkForUpdate(void){
QNetworkRequest request;
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setProtocol(QSsl::SecureProtocols);
request.setSslConfiguration(config);
request.setUrl(QUrl("https://sourceforge.net/projects/kidbasic/best_release.json"));
//other urls to test
//request.setUrl(QUrl("https://sourceforge.net/projects/openofficeorg.mirror/files/stats/json?start_date=2014-10-29&end_date=2014-11-04"));
//request.setUrl(QUrl("https://ro.gravatar.com/205e460b479e2e5b48aec07710c08d50.json"));
//request.setUrl(QUrl("http://headers.jsontest.com/"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
manager->get(request);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
}
void MainWindow::replyFinished(QNetworkReply* reply){
qDebug() << reply->error();
if(reply->error() == QNetworkReply::NoError) {
//process json reply
QString strReply = (QString)reply->readAll();
qDebug() << strReply;
} else {
qDebug() << "ERROR";
}
reply->deleteLater();
}
(それは私がhttps://indy.fulgan.com/SSL/からlibeay32.dll
とssleay32.dll
を取り、自分のアプリケーションと同じフォルダにそれらのファイルを置く警告なしに動作させるために - 理由https
の)。
他のURLで試してみると、私は正しい返答を得ました。 surceforge.net
リクエストを使用した場合、私はこのエラーを受け取ります:QNetworkReply::NetworkError(RemoteHostClosedError)
。
私はhttps://www.hurl.itと同じリクエストを行い、すべてが正常であるようです。私はhttps://httpstatus.io/と同じ結果を得ました。
QTでsurceforge.net
から有効な返信を受け取るにはどうすればよいですか?
誰がその部分のコードで答えることができない場合、私はあなたが単一main.cppにファイル無GUIを作成することをお勧め[ MCVE](http://stackoverflow.com/help/mcve)、エラーを再現します(信号ターゲットとしてlambdaを使用するだけです)。 – hyde
私は、最小、完全、および検証可能な例を作成します。 – Junior