一个线程画图的问题

jianmuyan 2012-03-28 11:41:19
继承QThread的一个类。重写run()函数。实现画圆的操作。代码如下:
void ThreadTest::run()
{
QPainter painter(pixmap);

for(int i = 10; i < 300; i += 10) {
painter.drawEllipse(i, y, 30, 30);
label->setPixmap(*pixmap);
QThread::msleep(100);
}
}

main函数里写:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QLabel *label = new QLabel;
label->resize(320, 200);

QPixmap pixmap(320, 200);
pixmap.fill(Qt::white);

ThreadTest *thread1 = new ThreadTest(label, &pixmap, 50);
ThreadTest *thread2 = new ThreadTest(label, &pixmap, 100);

label->setWindowTitle("Thread Demo");
label->show();

thread1->start();
thread2->start();

return a.exec();
}

提示QPixmap: It is not safe to use pixmaps outside the GUI thread,然后系统崩溃退出

查询后得之。GUI操作必须在主线程下完成。那我想实现这种类似线程画图的操作。怎么才能实现吗?
...全文
252 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianmuyan 2012-03-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:

。多谢了。这个意思就是QT不支持同时绘图?只能按代码顺序进行绘图对吗

是的
[/Quote]OK。结贴拉
zhu_xz 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

。多谢了。这个意思就是QT不支持同时绘图?只能按代码顺序进行绘图对吗
[/Quote]
是的
jianmuyan 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

Qt的GUI操作只能在主线程里面进行
在其他线程里面只能对QImage进行操作
[/Quote]。多谢了。这个意思就是QT不支持同时绘图?只能按代码顺序进行绘图对吗
zhu_xz 2012-03-28
  • 打赏
  • 举报
回复
Qt的GUI操作只能在主线程里面进行
在其他线程里面只能对QImage进行操作
jianmuyan 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

绘制过程在UI线程中直接绘制,不要再单独启用线程来做
[/Quote]您的意思是不是QT不支持同时绘图的功能?只能在主线程里按次序进行绘图?
开发者说 2012-03-28
  • 打赏
  • 举报
回复
绘制过程在UI线程中直接绘制,不要再单独启用线程来做

16,809

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧