• 5939阅读
  • 5回复

[提问]一个Widget中调用另一个的Widget的参数 [复制链接]

上一主题 下一主题
离线lefteye
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-25
关键词: 参数
在MainWindow下有两个Widget
在其中一个Widget,RenderArea中进行了文件的打开,读取,数据处理,然后绘图


另一个InfoArea中想获得RenderArea中提取处理完的一部分数据,并且进行显示以及其他的处理


遇到的问题是在InfoArea怎么提取不到RenderArea中的数据,是不是我的方法有问题?


是这样的:


在MainWindow中:
        ...


    renderArea = new RenderArea;
    scrollArea= new QScrollArea;
    scrollArea->setWidget(renderArea);


    patientInfoArea=new QScrollArea;
    infoArea=new InfoArea;
    infoArea->getPatientInfo(renderArea->str_id,renderArea->str_gender,renderArea-


>str_age);
        
        ...后面是Layout什么的


在InfoArea中:
void InfoArea::getPatientInfo(QString id,QString gender,QString age)
{
    this->id=id;
    this->gender=gender;
    this->age=age;
    reDraw=true;
    update();
}


void InfoArea::paintEvent(QPaintEvent * /* event */)
{


    if(!reDraw)
        return;


    QPainter painter(this);
    painter.drawText(20,80,this->id);


}




RenderArea中数据没有问题,这样是不是顺序的问题?还是用信号——槽联系?
离线jdwx

只看该作者 1楼 发表于: 2011-05-25
(RenderArea中进行了文件的打开,读取,数据处理,然后绘图)
RenderArea是在程序启动时就自动完成上述工作?
否则InfoArea就不能获得有效数据
(infoArea=new InfoArea;
infoArea->getPatientInfo(renderArea->str_id,renderArea->str_gender,renderArea-)在这里加断点调试,看看数据是否正常。

发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线lefteye
只看该作者 2楼 发表于: 2011-05-25

谢谢,发现了,(我还以为是我的思路的问题,以为Qt不能这样用)汗,果然,是执行顺序的问题

在MainWindow中的openfile()函数是调用的RenderArea里面的,所以原先以为只要把  infoArea->getPatientInfo()放到创建renderArea对象后面就行了

但是在这里,此时,renderArea并没有进行打开操作与数据处理,而是在后面,所以数据没有到达,把上面函数放到MainWindow构造函数最后面,问题解决

谢谢了

离线lefteye
只看该作者 3楼 发表于: 2011-05-25
]又出问题了,

上面调试时,是在MainWindow构造函数中直接调用openfile(),在其中规定好路径,然后调用renderArea->readXml(filePath);成功

但是openfile()如果是作为openAct的槽函数,利用对话框窗口读取文件时,依然失败

挠头——
[ 此帖被lefteye在2011-05-25 21:22重新编辑 ]
离线jdwx

只看该作者 4楼 发表于: 2011-05-25
windows程序是以事件为中心的,Mainwindow的构造函数应该以完成窗口初始化工作为主,像new控件。
读文件的工作放到openfile()里,再读取,数据处理,然后绘图,再infoArea->getPatientInfo(renderArea->str_id,renderArea->str_gender,renderArea-
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线lefteye
只看该作者 5楼 发表于: 2011-05-25
你的意思是把读文件的具体实现过程放到openAct的槽函数openfile()中,而不是放到RenderArea的readXml()中吗?
快速回复
限100 字节
 
上一个 下一个