#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QThread>
#include <QMap>
#include <QTreeWidgetItem>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QMap <QString, QTreeWidgetItem*> branch;
private slots:
void receive (QString s);
void receive2 (QString id, QString s);
private:
Ui::MainWindow *ui;
};
class Vlakno : public QThread
{
Q_OBJECT
private:
QString name;
signals:
void send (QString s);
void send2 (QString id, QString s);
public:
Vlakno (QString s) : name (s) { }
void run ();
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QThread>
void Vlakno::run ()
{
int n = 0;
while (true)
{
n ++;
emit send ("Hello " + QString::number (n) + " from thread " + name);
emit send2 (name, "Hello " + QString::number (n));
msleep (200);
}
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
for (int i = 1; i <= 3; i ++)
{
Vlakno * v = new Vlakno (QString ('A' + i - 1));
QObject::connect (v, SIGNAL (send(QString)), ui->textEdit, SLOT (append(QString)));
// QObject::connect (v, SIGNAL (send (QString)), this, SLOT (receive (QString)));
QObject::connect (v, SIGNAL (send2 (QString, QString)), this, SLOT (receive2 (QString, QString)));
v->start ();
}
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::receive (QString s)
{
QTreeWidgetItem * item = new QTreeWidgetItem;
item->setText (0, s);
ui->treeWidget->addTopLevelItem (item);
}
void MainWindow::receive2 (QString id, QString s)
{
// if (! branch.contains (id))
if (branch[id] == NULL)
{
QTreeWidgetItem * b = new QTreeWidgetItem;
b->setText (0, id);
ui->treeWidget->addTopLevelItem (b);
// branch.insert (id, b);
branch[id] = b;
b->setTextColor(0, QColor::fromHsl (branch.count() * 120 % 360, 250, 128));
}
QTreeWidgetItem * item = new QTreeWidgetItem;
item->setText (0, s);
// branch.value(id)->addChild (item);
branch[id]->addChild (item);
item->setTextColor (0, branch[id]->textColor(0));
}