Probuje podpiac do watku odswiezanie w glownym oknie aplikacji pewnych danych, jednak widac nie bardzo rozumiem dzialanie bo za nic mi to nie wychodzi. Tak wiec prosze o pomoc.
QThreadEx - pomocnicza klasa tworze watek i przenosze QObject ktory emituje sygnal do mainwindow przez moveToThread
#ifndef QTHREADEX_H
#define QTHREADEX_H
#include <QThread>
class QThreadEx : public QThread
{
protected:
void run() { exec(); }
};
#endif // QTHREADEX_H
klasa color
#ifndef COLOR_H
#define COLOR_H
#define _WIN32_WINNT 0x0403
#include <windows.h>
#include <QObject>
#include "kalwindow.h"
struct COLOR
{
DWORD red;
DWORD green;
DWORD blue;
};
class Color : public QObject
{
Q_OBJECT
private:
...
public:
Color();
~Color();
COLOR Update();
void run();
signals:
void signal(COLOR color);
};
#endif // COLOR_H
//color.cpp
void Color::run()
{
int i = 0;
while(1)
{
_sleep(200);
i++;
if(i==1000)
emit signal(Update());
}
}
funkcja Update() zwraca mi strukture COLOR na podstawie polozenia myszki. Sygnal powinien emitowac COLOR.
mainwindow
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
KalWindow *Kal;
Color *cKal;
QThreadEx cKalThread;
private slots:
void CStart();
void CStop();
void Update(COLOR color);
};
// mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
Kal = new KalWindow();
if(Kal->Get_isSet())
{
cKal = new Color();
cKal->moveToThread(&cKalThread);
cKal->connect(cKal,SIGNAL(signal(COLOR)),this,SLOT(Update(COLOR)));
connect(ui->Start,SIGNAL(clicked()),this,SLOT(CStart()));
connect(ui->Stop,SIGNAL(clicked()),this,SLOT(CStop()));
}
}
void MainWindow::Update(COLOR color)
{
QString text;
text.setNum(color.blue);
ui->blue->setText(text);
text.setNum(color.green);
ui->green->setText(text);
text.setNum(color.red);
ui->red->setText(text);
}
void MainWindow::CStart()
{
cKalThread.start();
}
void MainWindow::CStop()
{
cKalThread.terminate();
}
Nie wiem czy dobrze to rozumiem ale tworze QObject cKal potem pakuje go do watku cKalThread i kiedy uruchomie go przyciskiem start powinien wyemitowac sygnal update co chwile a potem funkcja Update powinna mi uaktualnic labele. Jednak tak nie jest ;).
Jesli jakis glupi blad zrobilem to przepraszam ale chory jestem, tak czytam o tych watkach i juz nic nie wiem ;).