• 5815阅读
  • 8回复

[提问]QGroupbox 动态添加滚动条显示不出来 [复制链接]

上一主题 下一主题
离线太阳真圆
 

只看楼主 倒序阅读 楼主  发表于: 2017-03-22
回复本帖可获得1RMB金钱奖励!
每人最多可获奖1次,奖池剩余9RMB金钱 (中奖几率80%)
代码如下:


找不出问题在哪?求大神指导~~
谢谢
离线太阳真圆

只看该作者 1楼 发表于: 2017-03-23
求大神啊……
离线kongxz

只看该作者 2楼 发表于: 2017-03-23
回帖奖励+ 1
我猜,你的layout写串了。倒数第二行的taskVLayout哪来的?
离线太阳真圆

只看该作者 3楼 发表于: 2017-03-23
回 kongxz 的帖子
kongxz:我猜,你的layout写串了。倒数第二行的taskVLayout哪来的? (2017-03-23 14:47) 

那个是前面声明的一个布局,在更大的一个窗口里。
scrollArea 里用不用布局呢? 就是541行和542行那个,但是试了一下,没有也显示不出来。
离线kongxz

只看该作者 4楼 发表于: 2017-03-28
回 太阳真圆 的帖子
太阳真圆:那个是前面声明的一个布局,在更大的一个窗口里。
scrollArea 里用不用布局呢? 就是541行和542行那个,但是试了一下,没有也显示不出来。 (2017-03-23 15:18) 

scrollArea的最大高度小于里面widget最小高度,宽度也一样,或者设置 scrollBarPolicy
离线太阳真圆

只看该作者 5楼 发表于: 2017-03-28
回 kongxz 的帖子
kongxz:scrollArea的最大高度小于里面widget最小高度,宽度也一样,或者设置 scrollBarPolicy (2017-03-28 08:47) 

您有这方面的例子吗?可以分享下源代码么?谢谢啦。
我设置最大最小宽度后,什么都显示不了。试了我能想到的各种方法,只有setgeometry()函数设置滚动区域的固定大小后才可以显示,但是我里面的控件是动态添加的,无法确定大小。
离线kongxz

只看该作者 6楼 发表于: 2017-03-29
回 太阳真圆 的帖子
太阳真圆:您有这方面的例子吗?可以分享下源代码么?谢谢啦。
我设置最大最小宽度后,什么都显示不了。试了我能想到的各种方法,只有setgeometry()函数设置滚动区域的固定大小后才可以显示,但是我里面的控件是动态添加的,无法确定大小。 (2017-03-28 09:54) 

m_Area = new QScrollArea(this);
QRect rect = m_Area->geometry();
QWidget * widget = new QWidget(this);
m_Area->setWidget(widget);
widget->setMinimumHeight(rect.height() + 1000);

简单的说就是Area里面widget的最小高度大于Area本身的最大高度。你widget里的控件是动态加载的就要保证widget里面的控件要有最小大小,不然widget默认用适应Area的大小,setLayout的话会把里面的控件全压缩掉的。
1条评分金钱+3
太阳真圆 金钱 +3 - 2017-03-29
离线太阳真圆

只看该作者 7楼 发表于: 2017-03-29
回 kongxz 的帖子
kongxz:
m_Area = new QScrollArea(this);
QRect rect = m_Area->geometry();
QWidget * widget = new QWidget(this);
m_Area->setWidget(widget);
.......

         QWidget *taskRdcwdg = new QWidget(this);
        //窗口内添加布局
        QHBoxLayout *tmpTaskRdcHLayout = new QHBoxLayout(taskRdcwdg);
        //设置滚动区域
        QScrollArea *rdcScrollArea = new QScrollArea;
        rdcScrollArea->setBackgroundRole(QPalette::Dark);
        QRect tmpRect = rdcScrollArea->geometry();
        rdcScrollArea->setWidgetResizable(true);
        taskRdcwdg->setMinimumWidth(tmpRect.width()+10);
        rdcScrollArea->setWidget(taskRdcwdg);
        //设置滚动条
        rdcScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
        rdcScrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        taskVLayout->addWidget(rdcScrollArea);

那个是我现在的代码,但是运行结果还是和以前一样啊,如下图所示:


但是结果应该是这样的:

离线kongxz

只看该作者 8楼 发表于: 2017-03-29
回 太阳真圆 的帖子
太阳真圆:         QWidget *taskRdcwdg = new QWidget(this);
        //窗口内添加布局
        QHBoxLayout *tmpTaskRdcHLayout = new QHBoxLayout(taskRdc .. (2017-03-29 15:24) 

你给的图太那啥了,我都不知道啥意思?
你可以取出有问题时候的taskRdcwdg的rect,然后不加ScrollArea,设置taskRdcwdg的大小为rect,不要在外面加任何layout,估计显示的结果是一样的。这是你taskRdcwdg布局的问题。
taskRdcwdg->setMinimumWidth(tmpRect.width()+10)应该是有效果的,你这没效果我也不清楚原因,你可以加个500,1000试试,或者再设置HorizontalScrollBarPolicy AlwaysOn看看是不是有那么大的宽度给你拖动。
快速回复
限100 字节
 
上一个 下一个