一个线程画图的问题
继承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操作必须在主线程下完成。那我想实现这种类似线程画图的操作。怎么才能实现吗?
[解决办法]
绘制过程在UI线程中直接绘制,不要再单独启用线程来做
[解决办法]
Qt的GUI操作只能在主线程里面进行
在其他线程里面只能对QImage进行操作
[解决办法]