I have solved this problem, I created a help class that holds the qscrollarea and the fix is to update qscrollarea viewport. here is the code for the helpwidget
testHelpWidget::testHelpWidget(QString path,viewerManager *cMgr, QWidget *parent)
: QWidget(parent)
{
QVBoxLayout *layout = new QVBoxLayout;
scroll = new QScrollArea(this);
testWidget = new testWidgets(path,cMgr,this);
testWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
QObject::connect(testWidget,SIGNAL(zoomChanged()),this,SLOT(repaintZoom()));
scroll->setWidget(qmlWidget);
scroll->setWidgetResizable(true);
scroll->setAlignment(Qt::AlignLeft);
layout->addWidget(scroll);
setLayout(layout);
}
void testHelpWidget::repaintZoom(){
scroll->viewport()->updateGeometry();
scroll->viewport()->update();
scroll->update();
}
Code for zoom function in testWidget
void testWidgets::zoom(double scale){
double tmp = scale/1;
double reset = 1/previousScale;
if(scale == previousScale){
return;
}
view->scale(reset,reset);
view->resize(view->sizeHint()*reset);
view->scale(tmp,tmp);
previousScale = scale;
view->resize(view->sizeHint()*tmp);
view->updateGeometry();
view->update();
emit zoomChanged();
}