问题是这样的:
在QT工程中有一个子类化的QWidget类,用于使用QPainter绘图,还有一个主窗口类的Widget,也是子类化的QWidget,显示的界面是这样子的
界面中红色区域是用来绘图的,右边有四个按钮,分别用来获取数据,这四个按钮和用来绘图的QWidget都是是主窗口的子部件,想要达到的结果是点击“启动传感器”按钮就进行传感器的数据采集线程,每一次传感器获取最新的数据后,可以在绘图区域绘制出来,还没有头绪?
我的实现是在子类化的QWidget类(用于绘图的)中重载QPaintereven()函数,在该函数里面绘图,然后该类有一个槽(即以下程序中的RunSensor函数)用于数据获取,槽里面是一个while(1)死循环,
void Renderarea::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPen pen;
pen.setWidth(2);
painter.setPen(pen);
painter.translate(250,250); //绘图窗口为500*500,坐标中心移动到窗口中间
painter.scale(1, -1); //Y坐标变换为向上
for(int i=0;i<10;i++)
{
painter.drawPoint(a[i],b[i]);
}
}
QSize Renderarea::sizeHint() const
{
return QSize(500 , 500);
}
QSize Renderarea::minimumSizeHint()const{
//设置最小窗口大小
return QSize(200 , 200);
}
void Renderarea::LinkSensor()
{
for(int i=0;i<10;i++)
{
a[i]=i+1;
b[i]=i+1;
}
}
void Renderarea::RunSensor()
{
int TimeCount = 50;
while(1)
{
for(int i=0;i<10;i++)
{
a[i]=i+1+TimeCount;
b[i]=i+1+TimeCount;
}
TimeCount +=50;
update();
}
}