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
|
#include <QtGui>
#include <webclient.h>
#include <ui_chat.h>
class QRcui : public QWidget, public Ui_Form
{
Q_OBJECT
public:
QRcui();
};
QRcui::QRcui()
{
setupUi(this);
}
class QRcServer : public QObject
{
Q_OBJECT
public slots:
void instantiateUi(QWidget **root, Session *session)
{
Q_UNUSED(session);
QRcui *ui = new QRcui();
*root = ui;
uis.append(ui);
connect(ui->lineEdit_message, SIGNAL(returnPressed()), SLOT(addTextLine()));
connect(ui->pushButton_send, SIGNAL(clicked()), SLOT(addTextLine()));
ui->lineEdit_nick->setText(session->address.toString());
}
void addTextLine()
{
QRcui *ui = reinterpret_cast<QRcui * >(sender()->parent());
QString message = ui->lineEdit_message->text();
if (message.isEmpty())
return;
textLines.append(ui->lineEdit_nick->text() + ": " + message);
ui->lineEdit_message->clear();
while (textLines.count() > 10) {
textLines.takeFirst();
}
updateTextDisplays();
}
void updateTextDisplays()
{
QString text;
foreach (const QString &line, textLines) {
text += line + "\n";
}
foreach (QRcui *ui, uis) {
ui->textBrowser_chat->setText(text);
}
}
private:
QList<QString> textLines;
QList<QRcui *> uis;
};
int main(int argc, char **argv)
{
QApplication app(argc, argv);
WebClient webClient;
QRcServer qrcServer;
QRcServer object;
QObject::connect(&webClient, SIGNAL(newSession(QWidget **, Session *)),
&qrcServer, SLOT(instantiateUi(QWidget **, Session *)));
return app.exec();
}
#include "main.moc"
|