写了一个程序用来实现一个温度计的自定义控件。功能就是在窗口的输入栏输入一个温度的值,点一下按键,那个温度计就会显示输入的温度。
我用的是提升的方法来画温度计,自建了一个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.
有没有大佬知道到底是怎么回事,以及怎么解决这个问题。