如何向父 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 添加滚动条的主要内容,如果未能解决你的问题,请参考以下文章

我想向 QVBoxLayout 添加滚动条

QGraphicsView 自定义滚动条

如何访问 Qtitan 视图的滚动条?

QT 做图片缩略显示 滚动条下拉 怎么实现动态加载下面的图片?

QScrollArea可以帮助我们实现让一个widget的内容带有滚动条(QWidget里内置QScrollArea,QScrollArea里再内置其它QWidget)

如何制作带有滚动条的 pyqt 选项卡式界面?