-
Notifications
You must be signed in to change notification settings - Fork 10
/
mainwindow.cpp
83 lines (71 loc) · 2.1 KB
/
mainwindow.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "mainwindow.h"
#include "httpclient.h"
#include <QtWidgets>
class MainWindow::MainWindowPrivate
{
public:
explicit MainWindowPrivate(QWidget *parent)
: q_ptr(parent)
{
urlEdit = new QLineEdit(q_ptr);
urlEdit->setText("http://www.baidu.com");
urlEdit->setPlaceholderText(QObject::tr("http://url"));
requestButton = new QPushButton(QObject::tr("GET"), q_ptr);
textEdit = new QPlainTextEdit(q_ptr);
httpClient = new HttpClient(q_ptr);
}
QWidget *q_ptr;
QLineEdit *urlEdit;
QPushButton *requestButton;
QPlainTextEdit *textEdit; // QPlainTextEdit
HttpClient *httpClient;
QElapsedTimer elapsedTimer;
};
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, d_ptr(new MainWindowPrivate(this))
{
setupUI();
buildConnect();
}
MainWindow::~MainWindow() {}
void MainWindow::onRequest()
{
QString url = d_ptr->urlEdit->text();
if (url.isEmpty() || !QUrl(url).isValid()) {
return;
}
d_ptr->requestButton->setEnabled(false);
d_ptr->elapsedTimer.start();
d_ptr->httpClient->get(url);
}
void MainWindow::onFinish()
{
d_ptr->requestButton->setEnabled(true);
qDebug() << "onFinish" << d_ptr->elapsedTimer.elapsed();
}
void MainWindow::setupUI()
{
QHBoxLayout *topLayout = new QHBoxLayout;
topLayout->addWidget(d_ptr->urlEdit);
topLayout->addWidget(d_ptr->requestButton);
QWidget *widget = new QWidget(this);
QVBoxLayout *layout = new QVBoxLayout(widget);
layout->addLayout(topLayout);
layout->addWidget(d_ptr->textEdit);
setCentralWidget(widget);
resize(640, 480);
}
void MainWindow::buildConnect()
{
connect(d_ptr->requestButton, &QPushButton::clicked, this, &MainWindow::onRequest);
connect(d_ptr->httpClient,
&HttpClient::readyReady,
d_ptr->textEdit,
&QPlainTextEdit::appendPlainText);
connect(d_ptr->httpClient,
&HttpClient::error,
d_ptr->textEdit,
&QPlainTextEdit::appendPlainText);
connect(d_ptr->httpClient, &HttpClient::finish, this, &MainWindow::onFinish);
}