首页| 论坛| 消息

标题:【求助】qt-embedded-2.3.7如何实现多线程绘图
作者:dazzling
日期:2008-11-02 10:31
内容:

写了一个界面,想开个线程单独在界面上绘图,想的是用postEvent()跟主界面通信,主界面中用customEvent()槽函数接受这个事件,事件类和线程类的run()函数以及事件接收槽函数如下:
class myEvent : public QCustomEvent
{
public:
myEvent(int i) : QCustomEvent(12345), id(i) {};
int id;
};

void ThreadA::run()
{
for(int i = 0; i < 14; i++){
myEvent *event = new myEvent(1);
QThread::postEvent(receiver, event);
sleep(1);
}
}

void Draw::customEvent(myEvent *event)
{
if(event->type() == 12345){
static int a[26] = {60, 84, 50, 91, 84, 101, 95, 132, 114, 120, 85, 131, 116, 6, 121, 210, 207, 63, 65, 214, 216, 121, 92, 121, 154, 161};
static int i = 0;
pa->drawLine(a, a, a, a); //主界面里定义的一个QPainter 指针
i = i + 2;
}
}
但是编译可以通过,运行起来却得不到想要的结果,线程貌似在执行,但是就是没有绘制曲线。。。。望各位大大们能指点一二,不胜感激


#1 [zuogenyu 11-04 16:32]
我要是帮你整出来,版主给分么?
#2 [dazzling 11-04 18:41]
我是新手,这才是偶的第一篇贴,不知道有没有LS要的分,有的话就都拿去吧!
#3 [zuogenyu 11-05 09:09]
你把代码多贴点出来,最好是把你需要改的那部分整个提出来生成个完整的工程再发给我,我就可以帮你完成其他的了。你这样贴那么几个函数,我确实猜不出其他相关细节,也无从下手。
#4 [imho 11-05 13:29]
上面这个程序基本上和多线程没什么关系
#5 [dazzling 11-05 20:27]
嗯,好的,先谢谢zuogenyu了,之前只是怕贴出来太多了,看不清楚,所以就挑了几个觉得可能有问题的地方给贴出来了,完整的程序贴在了下面,目的主要是想在主界面上有两个按钮,点击其中一个打开一个线程可以在主界面绘制一条曲线,点击另一个也是同样的功能,但是他俩要可以同时运行,程序写的比较烂,希望不要见笑啊~~麻烦了
#ifndef TEST_H
#define TEST_H
#include
#include
#include
#include
class QPushButton;
class Draw;
class myEvent;
class ThreadA : public QThread
{
public:
ThreadA(Draw* d) : receiver(d)
{ ; }
void run();
private:
Draw *receiver;
};
class ThreadB : public QThread
{
public:
ThreadB(Draw* d) : receiver(d)
{ ; }
void run();
private:
Draw *receiver;
};
class Draw : public QDialog
{
Q_OBJECT
public:
Draw(QWidget* parent = 0, const char* name = 0);
private:
QPushButton* buttonA;
QPushButton* buttonB;
QPushButton* button1;
QPainter *pa;
QPainter *pb;
ThreadA threadA;
ThreadB threadB;

protected:
void customEvent(myEvent *);
public slots:
void drawGrid();
void startA();
void startB();

protected slots:
void languageChange();
};
#endif //TEST_H

#include "test.h"
#include
#include
#include
#include
#include
#include
class myEvent : public QCustomEvent
{
public:
myEvent(int i) : QCustomEvent(12345), id(i) {};
int id;
};
void ThreadA::run()
{
for(int i = 0; i < 14; i++){
myEvent *event = new myEvent(1);
QThread::postEvent(receiver, event);
&nbs ..

<< 1 2 3 >> (1/9)

回复 发表
主题 版块