[[qtthread]]
 
#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));
}
 
qtthread.txt · Last modified: 2014/03/26 17:08 by 147.32.8.22
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki