![](/img/trans.png)
[英]Square custom QWidgets inside QGridLayout inside QScrollArea
[英]QScrollArea messing up with QGridLayout : QGridLayout hidden and no scroll
我正在嘗試使 QGridLayout 可滾動。 它可能包含多個自定義小部件,小部件的數量不固定。 當有超過 x 個小部件時,QGridLayout 必須是可滾動的,x 是一個任意數字。
問題是,當我使用 QScrollArea 時,QScrollArea 似乎隱藏了整個布局(僅顯示滾動區域的背景顏色)。 當我單獨使用 QGridLayout 時,我的視圖 - 當然 - 不可滾動但一切正常。
我可能遺漏了一些東西,我的猜測是:
這是一段涉及的代碼:
QScrollArea *scrollArea = new QScrollArea;
QWidget *resultsPage = new QWidget;
booksGrid = new QGridLayout;
booksGrid->setSizeConstraint(QLayout::SetMinAndMaxSize);
resultsPage->setLayout(booksGrid);
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(resultsPage);
mainWidget->addWidget(scrollArea);
此外,booksGrid 被聲明為一個類屬性,mainWidget 是一個 QStackedWidget。
歡迎任何幫助,如果您需要更多信息,請告訴我!
由於我在您的代碼片段中看不到任何可疑內容,因此我制作了一個MCVE來重現您的問題:
#include <QtWidgets>
int main(int argc, char **argv)
{
qDebug() << "Qt Version: " << QT_VERSION_STR;
// main application
QApplication app(argc, argv);
// setup GUI
QMainWindow qWin;
QScrollArea qScrArea;
QWidget qScrView;
QGridLayout qGrid;
enum { nCols = 4 };
#define MAKE_LABEL(I) \
QLabel qLbl##I(QString::fromUtf8("Label "#I)); \
qGrid.addWidget(&qLbl##I, I / nCols, I % nCols)
MAKE_LABEL(0); MAKE_LABEL(1); MAKE_LABEL(2); MAKE_LABEL(3); MAKE_LABEL(4);
MAKE_LABEL(5); MAKE_LABEL(6); MAKE_LABEL(7); MAKE_LABEL(8); MAKE_LABEL(9);
MAKE_LABEL(10); MAKE_LABEL(11); MAKE_LABEL(12); MAKE_LABEL(13); MAKE_LABEL(14);
MAKE_LABEL(15); MAKE_LABEL(16); MAKE_LABEL(17); MAKE_LABEL(18); MAKE_LABEL(19);
MAKE_LABEL(20); MAKE_LABEL(21); MAKE_LABEL(22); MAKE_LABEL(23); MAKE_LABEL(24);
MAKE_LABEL(25); MAKE_LABEL(26); MAKE_LABEL(27); MAKE_LABEL(28); MAKE_LABEL(29);
MAKE_LABEL(30); MAKE_LABEL(31); MAKE_LABEL(32); MAKE_LABEL(33); MAKE_LABEL(34);
MAKE_LABEL(35); MAKE_LABEL(36); MAKE_LABEL(37); MAKE_LABEL(38); MAKE_LABEL(39);
#undef MAKE_LABEL
qScrView.setLayout(&qGrid);
qScrArea.setWidget(&qScrView);
qWin.setCentralWidget(&qScrArea);
qWin.show();
// run-time loop
return app.exec();
}
在 Windows 10(64 位)上在 VS2013、Qt 5.9.2 中編譯和測試:
快照是在開始 (a)、調整大小 (b) 和滾動 (c) 之后拍攝的。
對我來說,一切看起來和工作都像預期的一樣。
您也可以編譯和測試您身邊的示例。 如果它顯示出與您的應用程序相同的損壞行為,那么您的 Qt 版本有問題(否則您的應用程序中有問題)。
解決方案 - resultsPage 是一個個性化的小部件,包含幾個其他小部件,具有未指定的大小,排列在 QGridLayout 中。
小部件的封裝如下: QMainWidget -> QScrollArea -> 個性化 QWidget resultsPage -> QGridLayout -> 未指定大小的個性化 QWidgets結果
最后,我唯一要做的就是在 QWidget 結果的構造函數中使用setFixedSize(int w, int h);設置固定大小;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.