دانلود فایل
-
p{direction:rtl; text-align:right}. من میخوام یه فایل متنی رو با برنامم دانلود کنم و بعد بخونمش
p{direction:rtl; text-align:right}. البته اگه نیازی به دانلود نباشه هم بهتره
مثلا خود کیوت فایل رو توی سرور باز کنه و بخونتش بدون اینکه دانلودش کنهp{direction:rtl; text-align:right}. فرض کنید یه فایل متنی توی این آدرسه
http:\server.com\version.txt
و شماره نسخه برنامه توشه مثلا ۱٫۰
حالا میخوام برنامه این شماره رو بخونه و چک کنه که آپدیت لازم هست یا آخرین نسخه در حال استفادست. -
p{direction:rtl;text-align:right}. سلام
بهترین کار اینه که یک کلاس بسازی :@
class MyClass : public QObject
{
Q_OBJECTpublic:
MyClass();
void fetch();public slots:
void replyFinished(QNetworkReply*);private:
QNetworkAccessManager* m_manager;
};
@بعد به این شکل ازش استفاده کنی :
@
MyClass::MyClass()
{
m_manager = new QNetworkAccessManager(this);connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
}
void MyClass::fetch()
{
m_manager->get(QNetworkRequest(QUrl("آدرس فایل")));
}void MyClass::replyFinished(QNetworkReply* pReply)
{QByteArray data=pReply->readAll(); QString str(data); ......
}
@ -
p{direction:rtl; text-align:right}. عباس جان ممنون
p{direction:rtl; text-align:right}. این خطا رو میده
error: undefined reference to `QNetworkAccessManager::QNetworkAccessManager(QObject*)'p{direction:rtl; text-align:right}. میشه یه تابع بنویسی که این کار رو بکنه (نه یه کلاس)
-
@
#include <QtNetwork>
#include <QNetworkAccessManager>
#include <QUrl>
@p{direction:rtl;text-align:right}. اینارو اینکلود کردی؟
اینکارو بکن اگر نشد بگو تا 2 تا روش دیگه هم هست اونارو هم تست کنیم@
QT += network
@p{direction:rtl;text-align:right}. اینم به فایل .pro پروژت باید اضافه کنی
-
p{direction:rtl;text-align:right}. تابعی که وصل به هیچ کلاسی نباشه مطمئنا نمیتونه این کارو انجام بده
چون network مبحث گسترده ای هست
برای خود منم جای سوال بود که چرا توی C# با 4 خط کد براحتی اینکارو انجام میدادم ولی تو کیوت نمیشه
بعد که تحقیق کردم دیدم تمامی این کلاسهارو از قبل توی دات نت فریم ورک نوشتن و شما فقط توسط namespace ها و functions ها فراخوانیشون میکنید و اصلا کلاس رو نمیبینید!
اما اینجا خوبیش اینه که حتی می تونید برنامه ریزی کنید که چطوری به هدف برسید و در راه اگر مشکلاتی بود برطرف کنید که در سی شارپ چنین ویژگی هایی یافت نمیشه،و خودتون باید کلاسشو بنویسید که کار هر برنامه نویسی نیست! -
p{direction:rtl; text-align:right}. ممنون به خاطر توضیحاتت
اون QT += network رو به فایل پروژه اضافه کردم درست شد
اما هنوز دانلود نمیکنه انگار
من str رو توی هدر کلاس public کردم و بیرون کلاس با QMessageBox::information(this,"f", myClass->str); هیچی چاپ نمیشه@#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkAccessManager>
#include <QUrl>class downloadUpdate : public QObject
{
Q_OBJECTpublic:
downloadUpdate();
void fetch();
QString str;public slots:
void replyFinished(QNetworkReply*);private:
QNetworkAccessManager* m_manager;};@
====================
@#include "downloadupdate.h"
downloadUpdate::downloadUpdate()
{
m_manager = new QNetworkAccessManager(this);connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
}
void downloadUpdate::fetch()
{
m_manager->get(QNetworkRequest(QUrl("https://github.com/silvergit/tictactoe/blob/master/Authors")));
}void downloadUpdate::replyFinished(QNetworkReply* pReply)
{QByteArray data=pReply->readAll(); str=data;
}@
-
p{direction:rtl;text-align:right}. راستی اگر کار نکرد آدرسو به این تغییر بده ببین فایل مستقیم رو میخونه
@
m_manager->get(QNetworkRequest(QUrl("http://www.catonmat.net/download/awk.cheat.sheet.txt")));
@