Qt:尝试做一个httprequest,但似乎没有用。怎么了?

时间:2011-03-02 14:21:18

标签: qt httprequest

我一直在使用this example为我的Qt诺基亚应用程序创建一个http请求,但我似乎无法让它工作。

起初我尝试了QHttp,但它已被弃用。

这是结构:

mainwindow.cpp
mainwindow.h

request.cpp
request.h

以下是代码:

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    Request* request = new Request();
}

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

Request.h

#ifndef REQUEST_H
#define REQUEST_H

#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkReply>
#include <QNetworkRequest>

class Request : QObject
{
    //Q_OBJECT
    public:
        Request();
    public slots:
        void finishedSlot(QNetworkReply* reply);
        void checkConnection(QNetworkReply* reply);

};

#endif // REQUEST_H

顺便说一下......“Q_OBJECT”的用途是什么?

Request.cpp

#include "request.h"
#include <QDebug>
#include <QMessageBox>

Request::Request()
{
  QNetworkAccessManager* oNetworkAccessManager = new QNetworkAccessManager(this);
  QObject::connect(oNetworkAccessManager, SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot(QNetworkReply*)));
  QObject::connect(oNetworkAccessManager, SIGNAL(networkSessionConnected()),this,SLOT(checkConnection(QNetworkReply*)));

  QUrl url("http://www.redrock.no");
  QNetworkReply* reply = oNetworkAccessManager->get(QNetworkRequest(url));

}

void Request::checkConnection(QNetworkReply* reply)
{
    QMessageBox msgBox;
    msgBox.setText("checkConnection");
    msgBox.setInformativeText("The network session has started");
    msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
    msgBox.setDefaultButton(QMessageBox::Save);
    int ret = msgBox.exec();
}

void Request::finishedSlot(QNetworkReply* reply)
{

    QMessageBox msgBox;
    msgBox.setText("checkConnection");
    msgBox.setInformativeText("The request is done");
    msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
    msgBox.setDefaultButton(QMessageBox::Save);
    int ret = msgBox.exec();
}

消息框就是因为我的手机没有USB线。

我在“checkConnection”插槽和“finishedSlot”插槽都设置了断点,但没有任何反应。

任何人都知道我可能做错了什么?

2 个答案:

答案 0 :(得分:3)

以下是Q_OBJECT宏的解释:

除其他外,

  

Q_OBJECT宏必须出现在   类定义的私有部分   声明自己的信号和   槽...

所以我首先尝试取消注释,看看有什么变化。它应该至少让你的信号和插槽相互通信。 (这是一个特定于Qt的功能,不是C ++的一部分,需要Q_OBJECT宏。)我没有仔细查看其余的代码,因为这是首先要尝试的事情。实际上,我很惊讶它甚至可以在没有它的情况下进行编译。

答案 1 :(得分:0)

好吧,最后我发现了什么是错的......和往常一样,这只是我的一个小错误。

我取消注释了Q_OBJECT,并得到了一些vtable错误或类似的东西。今天早些时候,当我在那里有Q_OBJECT时,我确实得到了这个错误信息,这就是我评论它的原因。

但是因为我是Qt的新手,所以我忘了在request.h中输入QObject “#include”

这为我解决了一切:)

感谢Dave的阐述和阐述。