如何为一个qt widget做一个滚动条

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为一个qt widget做一个滚动条相关的知识,希望对你有一定的参考价值。

因为我的widget上有很多空间,大部分是pushbutton,有很多,widget是个边栏,我希望当button超过widgetg高度的时候,就显示滚动条,我用QScrollArea 但是不起作用,请教各位,下面是我的写法,不知道那里的问题

QScrollArea* pArea = new QScrollArea;
pArea->setWidget(this);
QPushButton* qb = new QPushButton(pArea);
qb->setObjectName(QString::fromUtf8("pushButton"));
qb->setGeometry(QRect(0, 50, 75, 23));

    QScrollArea *pArea= new QScrollArea(this);
    QWidget * qw = new QWidget(pArea);//需要滚动的是一个Qwidget,而如果是在设计器里面拖入控件,会自动添加一个

    QPushButton * pb = new QPushButton(qw);//测试用,实际你使用就是把按钮设置父窗口,放进qw
    pb->setText("1235647");
    pb->move(130,50);

    pArea->setWidget(qw);//这里设置滚动窗口qw,
    pArea->setGeometry(0,0,200,200);//要显示的区域大小
    qw->setGeometry(0,0,300,300);//这里变大后,看出他实际滚动的是里面的QWidget窗口

参考技术A 道理上你应该
pArea->setWidget(qb);

QT 主窗口 添加滚动条

一.描述

我的程序布局是这样的,主窗口继承自QMainWindows,主窗口中包含一个Widget,Widget下面包含其它界面元素,这个Widget作为继承自QMainWindows的CentralWidget,QMainWindows类型的窗口中还包含默认标题栏和状态栏。我是在主窗口之中添加了一个QScrollArea,然后将Widget放入滚动条区域中,然后在主窗口的resizeEvent事件响应中检测主窗口的变化,实时修改滚动条区域的大小和放置在滚动条区域中Widget的大小,达到了需要的效果。

二.实现步骤

1.在主界面初始化时创建滚动条(QScrollArea类)

//以主界面为父窗口创建滚动条
QScrollArea *pScroll=new QScrollArea(this);

//将包含所有UI信息的Widget放进滚动条区域
pScroll->setWidget(ui.centralWidget);

2.在主窗口的resizeEvent事件响应中实时改变窗口大小

Void MainFram::resizeEvent(QResizeEvent *event)
{
    if(pScroll)
    {
        /*设置滚动条区域大小时,需要减去状态栏那部分的高度(实际高度并非是状态栏的高度,
          本处使用4倍的状态栏高度,可根据实际显示效果调整)否则会覆盖状态栏的显示。
          此处53就是标题栏与任务栏的高度,是centralWidget在整个界面中相对于主界面左上角坐标
          的y值*/
        pScroll->setGeometry(0,53,width(),height()-4*ui.statusBar->height());
        ui.centralWidget->setMinimumSize(width(),height()-4*ui.statusBar->height());
    }

}

3.显示效果

 

以上是关于如何为一个qt widget做一个滚动条的主要内容,如果未能解决你的问题,请参考以下文章

QT滚动条的问题?

QT 主窗口 添加滚动条

QT 主窗口 添加滚动条

在winform中,如何为DatagridView设置横向滚动条

如何为 CSS webkit 滚动条添加边距? [关闭]

VB如何为picturebox加滚动条?