#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: QMap 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 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)); }