首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使QScrollArea工作

无法使QScrollArea工作
EN

Stack Overflow用户
提问于 2013-10-21 12:02:00
回答 1查看 1K关注 0票数 2

我有一个QDeclarativeView,我想放在一个QScrollArea中,问题是scrollarea不工作。不管我设置了多大的声明性视图。我没有得到滚动条,就好像它看不出视图需要一个滚动条。如果我没有设置setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);,滚动条就不会出现。

父级作为中心部件插入到边界布局中-我使用这个布局http://qt-project.org/doc/qt-4.8/layouts-borderlayout.html

代码语言:javascript
运行
复制
myWidgets *editWidget = new myWidgets(pathToExe,viewerMgr, this);
editWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

以下是myWidget:

代码语言:javascript
运行
复制
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);

我在内容上尝试了不同的大小,但就像qscrollarea视图没有检测到我的小部件什么时候比qscrollarea的可见视图大。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-22 12:58:22

我已经解决了这个问题,我创建了一个包含qscrollarea的帮助类,修复是更新qscrollarea视图端口。下面是here小部件的代码

代码语言:javascript
运行
复制
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中变焦函数的编码

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19493964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档