How to work with QEvent ??
I tried to transfer information (QString) from the main stream to the next thread through a class inherited from QEvent.
He began to do the example in the book of Max Schlee (Qt5.3), But there I did not even understand the design
public: enum {ProgressType = User + 1}; ProgressEvent() : QEvent((Type)ProgressType) { } And when I created the same for myself, she gathered, but did not pass the string,; _; sad
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QCheckBox> #include <QHBoxLayout> #include <QDebug> #include <QThread> #include <QEvent> #include <QCoreApplication> #include <iostream> #include <vector> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT int glob_i ; int glob_flow; int vector_schet; // Π΄Π°ΡΡΠΈΠΊ ΡΡΡΡΠ° public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); public slots: void start_sending(bool); // ΠΏΡΠΈΠ½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΡΠ΅ΠΊΠ±ΠΎΠΊΡ ΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡΡ ΡΡΠΎΡ ΡΠ»ΠΎΡ (ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ) private slots: void on_pushButton_clicked(); private: Ui::MainWindow *ui; QThread *thread = new QThread(); QVector<QThread*> vector_thread; QList<QCheckBox*> test_checkbox; // Π²ΠΎΡ Π²Π΅ΠΊΡΠΎΡ QCheckBox *checkBox = new QCheckBox(); // Π‘ΠΎΠ·Π΄Π°ΡΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π² ΡΠ΅Π±Π΅ ΡΠ΅ΠΊΠ±ΠΎΠΊΡ QWidget *checkBoxWidget = new QWidget(); // ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΠ»ΠΎΠΉ Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΎΠΉ ΠΊ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ QHBoxLayout *layoutCheckBox = new QHBoxLayout(checkBoxWidget); }; class NewsThread: public QThread { Q_OBJECT public slots: void run_NEW(); // ΠΊΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ Π² ΠΏΠΎΡΠΎΠΊΠ΅ signals: void otprawka (int); }; class StrokaEvent: public QEvent{ public: enum {qwert = User + 1}; StrokaEvent() : QEvent((Type)qwert) { } QString stroka; QString NewStroka(); void setStroka(QString); }; mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { glob_i=0; glob_flow =0; vector_schet =0; ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { glob_i++; //-- Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ΅ΠΊ Π±ΠΎΠΊΡ Π² ΡΠ°Π±Π»ΠΈΡΡ checkBoxWidget = new QWidget(); // ΡΠΎΠ·Π΄Π°ΡΠΌ Π½ΠΎΠ²ΡΠΉ qwidget() checkBox = new QCheckBox(); // ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΊΠ±ΠΎΠΊΡ layoutCheckBox = new QHBoxLayout(checkBoxWidget); // ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΠ»ΠΎΠΉ Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΎΠΉ ΠΊ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ test_checkbox.append(checkBox); int i =0; connect(checkBox, SIGNAL(toggled(bool)),this, SLOT(start_sending(bool))); // ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΡΠ΅ΠΊΠ΅ΡΠΎΠ² Ρ "Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ" start_sending checkBox->setText(QString::number(glob_i)); layoutCheckBox->addWidget(checkBox); // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅ΠΊΠ±ΠΎΠΊΡ Π² ΡΠ»ΠΎΠΉ layoutCheckBox->setAlignment(Qt::AlignCenter); // ΠΡΡΠ΅Π½ΡΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΡΠ΅ΠΊΠ±ΠΎΠΊΡ layoutCheckBox->setContentsMargins(0,0,0,0); // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½ΡΠ»Π΅Π²ΡΠ΅ ΠΎΡΡΡΡΠΏΡ ui->tW_test->insertRow(ui->tW_test->rowCount());//Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠ»ΠΈΡ ΡΡΡΠΎΠΊ (Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΊΠΎΠ»ΠΈΡ ΡΡΡΠΎΠΊ) ui->tW_test->setCellWidget(ui->tW_test->rowCount()-1, 1, checkBoxWidget); // Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠ°Π±Π»ΠΈΡΡ (ΡΡΡΠΎΠΊΠ°, ΡΡΠΎΠ»Π±Π΅Ρ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ) } void MainWindow::start_sending(bool Value) { // ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΆΠ°ΡΠ° ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ, ΠΎΡΠΆΠ°ΡΠ° ΡΠΎ Π½Π΅ ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ if (Value == true) { NewsThread *two_cl = new NewsThread(); // ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²ΡΠΎΡΠΎΠΉ ΠΊΠ»Π°ΡΡ for (int i =0;i < test_checkbox.length();i++ ) { if(test_checkbox[i]->isChecked() ==Value) { glob_flow++; QString strok = "dimasik :3"; StrokaEvent *S_E = new StrokaEvent; S_E->setStroka(strok); connect(test_checkbox[i], SIGNAL(stateChanged(int)), two_cl , SLOT(run_NEW()));// ΠΎΡ ΠΊΠΎΠ³ΠΎ, "ΡΠ΅Π°ΠΊΡΠΈΡ", ΠΊΠΎΠΌΡ, "Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅" thread = new QThread(); vector_thread.append(thread); vector_schet++; qDebug() << "vector_schet : " << vector_schet ; two_cl->moveToThread(vector_thread[vector_schet-1]); // ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π² ΠΏΠΎΡΠΎΠΊ vector_thread[vector_schet-1]->start(); // ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΏΠΎΡΠΎΠΊΠ΅ (Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ) } } } else { qDebug() << "chekbocks:" << " False"; glob_flow--; qDebug() << "vector_schet : " << vector_schet ; vector_thread[vector_schet-1]->exit(); } } void NewsThread::run_NEW() { StrokaEvent *S_E = new StrokaEvent; qDebug() << "run_NEW()"; for(;;){ // Π²Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» for (int i=0; i<500; i++){ qDebug()<< "Π§ΠΈΡΠ»ΠΎ :" << i <<"Π½ΠΎΠΌΠ΅Ρ \"ΠΏΠΎΡΠΎΠΊΠ°\" :" << S_E->NewStroka(); usleep(100000); } } } QString StrokaEvent::NewStroka() { return stroka; } void StrokaEvent::setStroka(QString str) { stroka = str; }