Не удается заставить QScrollArea работать

у меня есть QDeclarativeView что я хочу положить в QScrollArea проблема в том, что scrollarea не работает. Неважно, насколько большой я установил декларативное представление. Я не получаю полосу прокрутки, как будто она не может сказать, что для представления нужна полоса прокрутки. Если я не установил setVerticalScrollBarPolicy (Qt :: ScrollBarAlwaysOn); полоса прокрутки не появляется.

Родитель вставляется в borderlayout как центральный виджет — я использую этот макет http://qt-project.org/doc/qt-4.8/layouts-borderlayout.html

myWidgets *editWidget = new myWidgets(pathToExe,viewerMgr, this);
editWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

Вот мой виджет:

QScrollArea* scroll = new QScrollArea();
view = new QDeclarativeView(this);
view->setSource(QUrl::fromLocalFile(path));
view->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);

view->setResizeMode(QDeclarativeView::SizeViewToRootObject);
scroll->setWidget(view);
scroll->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
scroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
scroll->setWidgetResizable(true);

Я пробовал другой размер содержимого, но это похоже на то, что qscrollview не определяет, когда мой виджет больше видимого представления qscrollarea.

2

Решение

Я решил эту проблему, я создал класс справки, который содержит qscrollarea, и исправлением является обновление окна просмотра qscrollarea.
вот код для справки виджета

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();
}

Код для функции масштабирования в 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();
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]