Qt无法从我的功能访问对象数据

时间:2014-06-24 07:52:57

标签: c++ qt

我的代码编译没有错误,但输出到我所拥有的小lcd面板应该读取22.它读取数字44,这是在constuctor中设置的初始值。它无法更新为新值 看来MainWindow::finishedSlot(QNetworkReply* reply)未被访问,ui->lcdNumber->display(22)未按预期更新对象 我可以确认连接确实已建立,我有wireshark运行,我可以看到软件尝试并到达谷歌,但没有关于那台液晶显示器我可以工作因为我无法访问构造函数对象。
LCD的目的是反映连接信息,但是现在我只是想到达构造函数。

// mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QImageReader>
#include <QLCDNumber>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    nam = new QNetworkAccessManager();
    ui->lcdNumber->display(44);
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::connect()
{
    qDebug() << "connect";
    QObject::connect(nam, SIGNAL(finished(QNetworkReply*)),
    this, SLOT(finishedSlot(QNetworkReply*)));

    QObject::connect(nam, SIGNAL(finished(QNetworkReply*)),
    this, SLOT(on_pushButton_clicked()));
}

void MainWindow::requestPage(){
    QUrl url("http://www.google.com");
    QNetworkReply* reply = nam->get(QNetworkRequest(url));
}

void MainWindow::finishedSlot(QNetworkReply* reply){
    qDebug() << "finishedSlot";
    QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    QVariant redirectionTargetUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
    QByteArray bytes = reply->readAll();  // bytes
    QString string(bytes); // string
    ui->lcdNumber->display(22);
//    if (reply->error() == QNetworkReply::NoError)
//    {
//        QImageReader imageReader(reply);
//        QImage pic = imageReader.read();
//        QByteArray bytes = reply->readAll();  // bytes
//        QString string(bytes); // string
//        ui->lcdNumber->display(22);
        //qDebug()<<string;
//    }
//    else
//    {

//    }
}
void MainWindow::on_pushButton_clicked()
{
    requestPage();
}

// mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QObject>
#include <QNetworkAccessManager>

namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
public slots:
    void connect();
    void requestPage();
    void finishedSlot(QNetworkReply* reply);
    void on_pushButton_clicked();
private slots:
private:
    QNetworkAccessManager* nam;
};
#endif // MAINWINDOW_H

// main.cpp中

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MainWindow mConnect;
    mConnect.show();
    return a.exec();
}

2 个答案:

答案 0 :(得分:0)

也许是我,但似乎按钮clicked信号和on_pushButton_clicked插槽之间没有任何关联。

答案 1 :(得分:0)

最终工作解决方案

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QImageReader>
#include <QLCDNumber>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    nam = new QNetworkAccessManager();
    //connect2();
    //on_pushButton_clicked();
    QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
    QObject::connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(finishedSlot(QNetworkReply*)));
    QObject::connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(finishedSlot(QNetworkReply*)));
    ui->lcdNumber->display(66);
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::connect2()
{
    qDebug() << "connect";
    //QObject::connect(nam, SIGNAL(finished(QNetworkReply*)),
    //this, SLOT(finishedSlot(QNetworkReply*)));

    //QObject::connect(nam, SIGNAL(clicked()), this, SLOT(finishedSlot(QNetworkReply* reply)));
    //;
}

void MainWindow::requestPage(){
    QUrl url("http://www.google.com");
    QNetworkReply* reply = nam->get(QNetworkRequest(url));
}

void MainWindow::finishedSlot(QNetworkReply* reply){
    qDebug() << "finishedSlot";
    QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    QVariant redirectionTargetUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
    QByteArray bytes = reply->readAll();  // bytes
    QString string(bytes); // string
    ui->lcdNumber->display(11);
    qDebug()<<string;
//    if (reply->error() == QNetworkReply::NoError)
//    {
//        QImageReader imageReader(reply);
//        QImage pic = imageReader.read();
//        QByteArray bytes = reply->readAll();  // bytes
//        QString string(bytes); // string
//        ui->lcdNumber->display(22);
        //qDebug()<<string;
//    }
//    else
//    {

//    }
}
void MainWindow::on_pushButton_clicked()
{
    requestPage();
    //connect();
}