标题:在 qt 事件中含有耗时操作的函数的处理
作者:qypan
日期:2016-07-25 22:25
内容:
就比如我希望实现这样的功能:
我单击鼠标时,程序以鼠标当前坐标 (x, y) 为圆心画了一个圆,半径随意(比如 30),然后我希望程序在我单击 3 秒后自动以 (x+40, y+40) 为圆心画一个跟前面同样大小的圆.
3 秒只是模拟耗时操作,这里我并不希望使用多线程,我上网查过,应该可以使用 QCoreApplication::processEvents() 或 QEventLoop 类实现。但没有找到实例,这两个东西真心不会用。希望有人可以提供可以解决我问题的链接,或者给我提供一个类似的实例。
我的代码(可在 linux 系统编译执行):
//mything.h
#ifndef MYTHING_H
#define MYTHING_H
#include
class myThing : public QLabel{
Q_OBJECT
public:
myThing(QWidget *parent = 0);
protected:
void drawAnother(int x, int y);
void paintEvent(QPaintEvent *event);
void mousePressEvent(QMouseEvent *event);
private:
QPixmap *pixmap;
};
#endif
------------------------------------------------------------------------------------------
//mything.cpp
#include //linux 系统函数库
#include "mything.h"
myThing::
myThing(QWidget *parent)
: QLabel(parent)
{
resize(400, 200);
pixmap = new QPixmap(400, 200);
pixmap->fill(QColor(255, 255, 255));
}
void myThing::
paintEvent(QPaintEvent *event){
QPainter painter(this);
QRect dirtyRect = event->rect();
painter.drawPixmap(dirtyRect, *pixmap, dirtyRect);
}
void myThing::
drawAnother(int x, int y){
sleep(3); //其他平台做适当更改
QPainter painter;
painter.begin(pixmap);
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(56, 12, 23, 141));
painter.drawEllipse(QPoint(x, y), 30, 30);
update(QRect(QPoint(x-30, y-30 ..