Qt滚动条

简介

欲实现以下功能:

  1. 用dockWidget将“大纲”、“参数”、“视窗”等子窗口显示出来

  1. 点击“大纲”中的选项(例如“物理模型”),右侧“参数”会显示对应的控件

  1. 若控件太多,显示垂直滚动条

如图所示。

下面对遇到的问题进行总结。

常见问题

ScrollArea没有铺满DockWidget

使用setWidget(),例如

dock_TaskPage->setWidget(ui->scrollArea);

类似地,在“视窗”中添加graphicsView

dock_Display->setWidget(ui->graphicsView);

但是,参数为ui->stacked(QStackedWidget)时会闪退,显示“程序异常退出”

dock_TaskPage->setWidget(ui->stacked);

可能是因为该QStackedWidget还没有添加page或者没初始化。

ScrollArea没有显示滚动条

试出来一种方法,仅为权宜之计。

步骤

  1. 在UI编辑器中,往scrollAreaWidgetContents中拖入一个Layout,往Layout中拖入你想要显示的Widget(例如QStackedWidget stacked,以下简称stacked)

  1. setLayout

 ui->scrollAreaWidgetContents->setLayout(ui->verticalLayout);
  1. 在UI编辑器中设置stacked的SizePolicy的垂直策略为Maximum

  1. scrollAreaWidgetContents的垂直策略也设置为Maximum

  1. 将stacked中的page的垂直策略设置为fixed,并且使得MaximumSize和MinimumSize的高度相等

  1. 在代码中,将page的minimumHeight传给stacked和scrollAreaWidgetContents的maximumHeight

    QStackedWidget* w=ui->stacked;
    int ih=w->currentWidget()->minimumHeight();
    w->setMaximumHeight(ih);
    ui->scrollAreaWidgetContents->setMaximumHeight(ih);

代码

初始化:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    FileEdit::pFileEdit=&file1;
    initMainWindow();
    initDocks();
    initOutlineView();
    initTaskPage();
}  
  
...

void MainWindow::initTaskPage(){
    //
    page_c=new Page_ComputeInit;
    page_g=new Page_GeoGrid;
    page_m=new Page_MoveObj;
    page_o=new Page_Output;
    page_p=new Page_PhysicModel;
    page_s=new Page_Spatial;
    page_t=new Page_Time;

    QStackedWidget* w=ui->stacked;
    w->addWidget(page_c);
    w->addWidget(page_g);
    w->addWidget(page_m);
    w->addWidget(page_o);
    w->addWidget(page_p);
    w->addWidget(page_s);
    w->addWidget(page_t);
    w->setCurrentIndex(2);//page_c

    //滚动条
    int ih=w->currentWidget()->minimumHeight();
    w->setMaximumHeight(ih);
    ui->scrollAreaWidgetContents->setMaximumHeight(ih);
    ui->scrollAreaWidgetContents->setLayout(ui->verticalLayout);
    dock_TaskPage->setWidget(ui->scrollArea);
    ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

    //初始化数据
    ...
}

当点击“大纲”中的选项时:

void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
...
    //滚动条
    QStackedWidget* w=ui->stacked;
    int ih=w->currentWidget()->minimumHeight();
    w->setMaximumHeight(ih);
    ui->scrollAreaWidgetContents->setMaximumHeight(ih);
...
}

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值