paintEvent函数不被执行

时间:2021-11-25 19:00:37
先描述下我的类结构
首先是通道类,每个通道有编号等相关信息,还有根据时间变化的曲线数据,因为要绘图,所以从QWidget派生
其次是记录类,记录以文件方式保存,打开文件后方知有多少通道,将所以通道用QVBoxLayout布局管理起来,从QWidget派生
因为曲线可能很长,特意重写了一下QScrollArea,加上时间轴等相关内容,其中心控件是一个记录类对象
因为要多文档,所以mainwindow又以一个QMdiArea为中心控件,每次打开文件时执行下面的函数
void MainWindow::open()
{    
    CRecord *record = new CRecord(this);
    QString fileName = QFileDialog::getOpenFileName(this,tr("打开配置文件"),".",tr("config files(*.cfg)"));
    if(!fileName.isEmpty())
      record->loadFile(fileName);    
    else    
    { 
       return;    
    }   
    CScrollArea *scrollArea = new CScrollArea(record,this);    
    QWidget *subW = midArea->addSubWindow(scrollArea);    
    subW->showMaximized();
}
现在的问题是,每次打开文件后通道类的paintEvent函数不被执行,曲线绘制不出来了,无论我怎么调整主窗口,我试了下, 如果CScrollArea中重写paintEvent函数,也执行不了。只有主窗口的能被调用。
请问问题可能出线在什么地方?
谢谢


通道类定义:
class CChannel : public QWidget
{
    Q_OBJECT
public:
    explicit CChannel(QWidget *parent = 0);
========================================================================
class CAnalog : public CChannel
{
    Q_OBJECT
public:
    explicit CAnalog(QWidget *parent = 0);

==========================================

在记录类中,读文件时
        CAnalog *chan = new CAnalog(this);

郁闷了



设计中通道控件是可以被手动移动的,可我都弄成这样了,paintEvent函数还是不执行


paintEvent函数不被执行

函数名字也没写错啊
protected:    void paintEvent(QPaintEvent *);

通道类都是在记录类中创建的,传入的都是this指针,但是我在记录类中强制调用repaint或者update都不能使通道类调用paintEvent
感觉是不是类继承哪里有点问题

3 个解决方案

#1


用QGraphicItem、QGraphicsScene、QGraphicsView来做吧

#2


引用 1 楼 haltwang 的回复:
用QGraphicItem、QGraphicsScene、QGraphicsView来做吧


暂时不改这个了 谢谢

#3


请问LZ问题解决了吗?我现在也是打开文件之后paintEvent就不会调用了,求助啊

#1


用QGraphicItem、QGraphicsScene、QGraphicsView来做吧

#2


引用 1 楼 haltwang 的回复:
用QGraphicItem、QGraphicsScene、QGraphicsView来做吧


暂时不改这个了 谢谢

#3


请问LZ问题解决了吗?我现在也是打开文件之后paintEvent就不会调用了,求助啊