如何向父 QWidget 添加滚动条
Posted
技术标签:
【中文标题】如何向父 QWidget 添加滚动条【英文标题】:How to add a scrollbar to parent QWidget 【发布时间】:2010-08-02 05:02:15 【问题描述】:我了解如何将滚动区域添加到特定小部件。但是在我的情况下,Qwidget 有多个子小部件,这些都是使用 QVBoxLayout 设置的。现在在这种情况下如何添加滚动条?这里 QWidget 不是中心小部件,它是 TabWidget 的页面之一。我的代码如下:
QTabWIdget *center = new QTabWidget; setCentralWIdget(center);
xTab = new QWidget;
formLayout = new QFormLayout; formLayout->addWidget(...); formLayout->addWidget(...); formLayout->addWidget(...); formLayout->addWidget(...);
xTab->setLayout(formLayout);
现在如何将滚动条设置为 xTab?我尝试使用
scrollArea = new QScrollArea;
scrollArea->setWidget(xTab);
但是,这不起作用。
任何想法/建议都会有所帮助和赞赏。
【问题讨论】:
应该滚动什么?整个选项卡小部件或只是单个选项卡的内容?您是否尝试过在 Qt Designer 中创建 UI? 我只想让标签小部件的内容滚动。我没有在我的应用程序中使用 Qt 设计器,但是我尝试了一个带有 Qt 设计器的示例程序,其中我添加了一个垂直滚动条。结果是它添加了滚动条但不滚动内容。 【参考方案1】:您是否尝试过使用QScrollArea
作为标签页?
QTabWIdget *center = new QTabWidget; setCentralWIdget(center);
xTab = new QScrollArea;
formLayout = new QFormLayout; formLay....
xTab->setLayout(formLayout);
center->addTab(xTab, "XXX Tab");
【讨论】:
我也尝试过。但是在这种情况下,它会调整小部件的大小。在这个选项卡中,我有一个 textBrowser,而不是启用滚动条来滚动内容,TextBrowser 像 lineEdit 一样调整大小,并且所有小部件都在可用空间中调整。 我专门设置了 xTab->setWidgetResizable(false) - 即使它是默认设置。即使这样也无济于事。另外,我想知道这种方式和 setWidget(xTab) 在功能上不一样。 默认情况下,大多数小部件的大小策略设置为 QSizePolicy::Preferred,这意味着小部件可以展开,但这样做没有优势。您可能希望对子小部件设置最小尺寸限制以确保它们的可用性【参考方案2】:我使用以下方法取得了成功:
scroll=new QScrollArea(mainWindow->centralWidget);
scroll->setGeometry(mainWindow->tabWidget->geometry());
scroll->setWidget(mainWindow->tabWidget);
scroll->show();
QScrollArea 定义了可滚动小部件将出现的位置。如果 parent 为 0,则它是一个非模态窗口。 setGeometry 将 QScrollArea 实例设置为所需的尺寸(选项卡的尺寸)。 setWidget 定义 QScrollArea 将实际滚动的小部件。
【讨论】:
以上是关于如何向父 QWidget 添加滚动条的主要内容,如果未能解决你的问题,请参考以下文章
QT 做图片缩略显示 滚动条下拉 怎么实现动态加载下面的图片?
QScrollArea可以帮助我们实现让一个widget的内容带有滚动条(QWidget里内置QScrollArea,QScrollArea里再内置其它QWidget)