首先是通道类,每个通道有编号等相关信息,还有根据时间变化的曲线数据,因为要绘图,所以从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函数还是不执行
函数名字也没写错啊
protected: void paintEvent(QPaintEvent *);
通道类都是在记录类中创建的,传入的都是this指针,但是我在记录类中强制调用repaint或者update都不能使通道类调用paintEvent
感觉是不是类继承哪里有点问题
3 个解决方案
#1
用QGraphicItem、QGraphicsScene、QGraphicsView来做吧
#2
暂时不改这个了 谢谢
#3
请问LZ问题解决了吗?我现在也是打开文件之后paintEvent就不会调用了,求助啊
#1
用QGraphicItem、QGraphicsScene、QGraphicsView来做吧
#2
暂时不改这个了 谢谢
#3
请问LZ问题解决了吗?我现在也是打开文件之后paintEvent就不会调用了,求助啊