отсутствует производный класс с QObject

#c #qt #class #inheritance

#c #qt #класс #наследование

Вопрос:

Я получаю сообщение об ошибке ~ mainwindow.cpp:9: ошибка: переопределение ‘MainWindow:: MainWindow (QWidget *)’ MainWindow :: MainWindow (QWidget * parent): и я почти уверен, что он жалуется на неправильное имя производного класса. Базовым классом является MainWindow, но я не вижу, каким будет производный класс.

//mainwindow.cpp

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

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

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

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

void coreEng::finishedSlot(QNetworkReply* reply){

    QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);

    QVariant redirectionTargetUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);

    if (reply->error() == QNetworkReply::NoError)
    {

        QImageReader imageReader(reply);
        QImage pic = imageReader.read();

        QByteArray bytes = reply->readAll();  // bytes
        QString string(bytes); // string
    }

    else
    {

    }

//    delete reply();

}

void MainWindow::on_lcdNumber_overflow()
{

    QByteArray replyData = netReply->readAll();
}

void MainWindow::on_pushButton_clicked()
{
    QObject::on_pushButton_clicked(nam, SIGNAL(finished(QNetworkReply*)),
    this, SLOT(finishedSlot(QNetworkReply*)));
}
 

//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):
    QMainWindow(parent)
        {
            nam = new QNetworkAccessManager();
        }
    ~MainWindow();

private:
    Ui::MainWindow *ui;

public slots:
    //void connect();
    void on_pushButton_clicked();
    void requestPage();
    void finishedSlot(QNetworkReply* reply);
private slots:
    void on_lcdNumber_overflow();

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.on_pushButton_clicked();
    mConnect.requestPage();

    MainWindow w;
    w.show();

    return a.exec();
}
 

Ответ №1:

Вы определили MainWindow::MainWindow два раза. Первый в заголовочном файле и второй в исходном файле. Об этом говорится в сообщении об ошибке.

 explicit MainWindow(QWidget *parent = 0):
QMainWindow(parent)
    {
        nam = new QNetworkAccessManager();
    }
 

//

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