• 978阅读
  • 1回复

为什么Update不能调用paintEvent [复制链接]

上一主题 下一主题
离线tttomato
 

只看楼主 倒序阅读 楼主  发表于: 2021-09-26
写了一个程序用来实现一个温度计的自定义控件。功能就是在窗口的输入栏输入一个温度的值,点一下按键,那个温度计就会显示输入的温度。
我用的是提升的方法来画温度计,自建了一个DrawTemp的类,在里面画好了温度计,包括一些参数也在类里。在主窗口拖一个 widget 提升完之后可以正常显示。
在实现改变温度功能的时候发现我输入数字按下按钮,温度没有变化。后来在各个函数里加了qdebug测试后发现update函数并没有调用到paintEvent。不知道是为什么。

代码大概如下:


1.DrawTemp.cpp        里的函数

DrawTemp::DrawTemp(QWidget *parent):Qwidget(parent)
{
                     t_Value = 0;              设置温度初始值,在DrawTemp.h文件中已定义
                     /************其它全是控件的初始值设置,不打出来了**********/
}


void DrawTemp::paintEvent(QPaintEvent *)          
{
             QPaint painter(this);
             drawFuc_01(&painter);                    //调用自己写的画图函数。
              drawFuc_02(&painter);                   //调用自己写的画图函数。
             qDebug()<<"PaintEventFuction::value="<<t_Value<<endl;            //测试qpaintevent是否被调用,以及值的变化情况。
}

void DrawTemp::drawFuc_01(&painter){}
void DrawTemp::drawFuc_02(&painter){}

void DrawTemp::setValue(double t)
{
     t_Value = t;                                                //更改温度值
     update();                                                    //重绘
     qDebug()<<"setValueFuction::value="<<t_Value<<endl;    //测试update是否执行,以及值的变化情况。
}

2.mainwindow.cpp里的Button槽函数

void mainwindow::on_pushbutton_click()
{
     d = new DrawTemp();                                              d为DrawTemp的指针对象,在mainwindow.h文件中已定义
     int temp = ui->lineEdit->text().toDouble();               获取窗口中输入框的温度
     d->setValue(temp);                                                 调用DrawTemp中的setValue函数,更改温度并重绘

}

我在    setValue函数   和   PaintEvent函数   中用qDebug输出 t_Valuer的值,发现了一些问题
在我输入新的温度值,按下按钮后,setValue 函数输出的t_Value值是已经改变了的,就是我手动输的值。
但PaintEvent函数中的qDebug没有执行,因此我觉得应该是Update没用调用到paintEvent.

有没有大佬知道到底是怎么回事,以及怎么解决这个问题。

离线luansxx

只看该作者 1楼 发表于: 2021-09-26
update 之后,paintEvent 会在下一个消息循环中被调用。可以认为是一种 post 执行。
快速回复
限100 字节
 
上一个 下一个