2

Qtで開発を開始し、Webページのソースコードを取得しようとしています。これが私が持っているものです:

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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


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

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

/**/

class GetHTMLSource : public QObject
{
Q_OBJECT

public:
    GetHTMLSource();
    void GetSource();

public slots:
    void GetDone(QNetworkReply*);

private:
    QNetworkAccessManager* NetManager;
};


GetHTMLSource::GetHTMLSource()
{
    NetManager = new QNetworkAccessManager(this);

    connect(NetManager, SIGNAL(finished(QNetworkReply*)),
         this, SLOT(GetDone(QNetworkReply*)));

}

void GetHTMLSource::GetSource()
{
    NetManager->get(QNetworkRequest(QUrl("http://stackoverflow.com")));
}

void GetHTMLSource::GetDone(QNetworkReply* ReplyIn)
{

    QByteArray DataIn=ReplyIn->readAll();
    QString DataString(DataIn);

    //process str any way you like!

}

/**/

void MainWindow::on_pushButton_clicked()
{
    GetHTMLSource Test;
    Test.GetSource();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

。プロ

QT       += core gui

TARGET = TestGetPageSource
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

QT += network

エラーは次のとおりです。

mainwindow.obj:-1:エラー:LNK2001:未解決の外部シンボル "public:virtual struct QMetaObject const * __thiscall GetHTMLSource :: metaObject(void)const"(?metaObject @ GetHTMLSource @@ UBEPBUQMetaObject @@ XZ)

mainwindow.obj:-1:エラー:LNK2001:未解決の外部シンボル "public:virtual void * __thiscall GetHTMLSource :: qt_metacast(char const *)"(?qt_metacast @ GetHTMLSource @@ UAEPAXPBD @ Z)

mainwindow.obj:-1:エラー:LNK2001:未解決の外部シンボル "public:virtual int __thiscall GetHTMLSource :: qt_metacall(enum QMetaObject :: Call、int、void * *)"(?qt_metacall @ GetHTMLSource @@ UAEHW4Call @ QMetaObject @@ HPAPAX @ Z)

4

2 に答える 2

1

一般に、派生したクラスを作成するQObject場合は、それらを別々のヘッダーファイルとソースファイルに配置する必要があります。

したがって、1つのクラスに対して1つの.hファイルと1つの.cppファイル。

于 2012-11-07T20:50:30.340 に答える
1

自分で修正しました。もちろん、それは私の愚かな間違いでした。

クラス定義では:

public slots:
    void GetDone(QNetworkReply*);

実際の関数と一致しませんでした:

void GetHTMLSource::GetDone(QNetworkReply* ReplyIn)
{ ... }

ただし、分離された .h ファイルと .cpp ファイルに移動すると、おそらく役に立ちました。

于 2012-11-08T14:06:52.017 に答える