Qt中类提升后不显示问题
问题描述:
最近在qtCreator中写了一个程序.在这个程序中有一个控件需要自定义.所以我在使用qt设计师类画了一个控件然后再添加了一个MyButton类.在这个MyButton类里面我重写了几个鼠标事件以及重写了绘制事件:
每个重写的函数内的详细代码如下:
void MyButton::mousePressEvent(QMouseEvent *e)
{//鼠标点击事件if(e->button() == Qt::LeftButton){//加载点击图像p.load(m_press);//重绘update();}//还是要调用原来的事件进行响应QPushButton::mousePressEvent(e);
}void MyButton::enterEvent(QEvent *e)
{p.load(m_hover);update();QPushButton::enterEvent(e);
}void MyButton::leaveEvent(QEvent *e)
{p.load(m_normal);update();QPushButton::leaveEvent(e);
}void MyButton::mouseReleaseEvent(QMouseEvent *e)
{//鼠标点击事件if(e->button() == Qt::LeftButton){//加载点击图像p.load(m_normal);//重绘update();}//还是要调用原来的事件进行响应QPushButton::mouseReleaseEvent(e);
}void MyButton::paintEvent(QPaintEvent *e)
{(void)e;//重绘QPainter painter();painter.drawPixmap(rect(),p);// QPushButton::paintEvent(e);
}
在写下这些代码时我出现了组件提升后运行程序不显示的问题.查找bug时按照如下顺序进行了查找:
1,自定义控件的大小大于被提升控件的大小.
这块问题我在之前写项目时就遇到过,但是很可惜在排查完该项目后还是不对,自定义控件还是不显示.
2,重绘事件的问题
因为在自定义类中重写了重绘事件,所以对重绘事件代码进行了查看.我发现在重绘事件中没有调用QPushButton的重绘事件.所以:
1,我在代码中添加了QPushButton::paintEvent(QEvent*e);代码显示了但是显示的方式是以QPushButton原本的方式现实的.
2,去掉原本的事件,在重绘事件中给QPainter画家类指定父元素为该类.就是将 QPainter painter() 变成 QPainter painter(this);然后就正常显示了.