2017-11-03 34 views
1

この質問に答えるために多くのトピックが作成されています。しかし、私が発見したヒントのどれもこれまでのところ、私が扱ってる問題は解決しない...QScrollAreaがQGridLayoutでうんざりする:QGridLayoutが非表示でスクロールしない

それは非常に簡単です:私はQGridLayoutをスクロール可能にしようとしています。それはいくつかのパーソナルウィジェットを含むかもしれません、ウィジェットの数は固定されていません。 xウィジェット以上がある場合はQGridLayoutはスクロール可能でなければなりません。xは任意の数です。

問題がです:私はQScrollAreaを使用すると、QScrollAreaは全体のレイアウト(スクロール領域の背景色のみ示されている)を非表示にするようです。 QGridLayoutを単独で使うと、私のビューはもちろんスクロール可能ではありませんが、すべてがうまくいくように機能します。私はおそらく何かが足りないのです

は、私の仮定は以下のとおりです。

  • 私は何とかスクロール可能な領域の大きさを修正する必要がありますが、私はそれが必要だと確信していないですか、私はすでにそれをinconsciously
  • 親を行っている場合既存のQScrollAreaのウィジェットまたはチャイルドウィジェットは、異常な実装によってQScrollAreaが正常に動作するのを防ぎます。

はここmaincodeの面白い部分だ:

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

あるクラス属性として宣言されている私は、あなたがより多くの情報が必要さを知ってみましょう! ;)

ありがとう!

+0

'booksGrid-> setSizeConstraint(QLayout :: SetMinAndMaxSize);' out? – Scheff

+0

しかし、とにかくこの行は必要でしたが、問題を解決するために私の答えを見てください;) – SparkyRaccoon

+0

私は何とかあなたの答えにあなたが実際に記述したことについて少し疑念がありました。あなたはあなたの質問にあなたのカスタムウィジェットを言及していたはずです(または私は尋ねたことがあります。この場合、私はおそらく私の答えを提供していませんでした)。 48時間後にあなたは[自分の答えを受け入れる]ことができます(https://stackoverflow.blog/2009/01/06/accept-your-own-answers/)。 – Scheff

答えて

0

最後に闘争の1日後、私はこの問題は非常に簡単だったことを知る:resultsPageはがにQGridLayout

に配置され、未指定のサイズで、私の味のいくつかの他のウィジェットが含まれていpersonnalizedウィジェットましたこの例示: - > QScrollArea - > personnalized QWidgetのresultsPage - > QGridLayout - QMainWidget不特定サイズで> personnalized QWidgetのS結果

それで、私がしなければならなかったのは、QWidget結果のコンストラクタで、このメソッドで固定サイズを設定することだけでした。 setFixedSize(int w、int h);

0

私はあなたのコード断片中の不審な何かを見ることができなかったとして、私はあなたの問題を再現するために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(); 
} 

VS2013、Windowsの10上のQt 5.9.2(64ビット)でコンパイルとテスト:

スナップショットを開始した後に取得されSnapshot of testQScrollArea-Widget (after scroll)

A)Snapshot of testQScrollArea-Widget (after start) B)Snapshot of testQScrollArea-Widget (after resize) C)(A)、リサイズ後(B)、及びスクロールする(c)。

私にとっては、すべてが見え、期待どおりに機能します。

サンプルをコンパイルしてテストすることもできます。あなたのアプリケーションのように同じ壊れた振る舞いを示すなら、あなたのQtバージョンで何か問題があります(それ以外の場合はアプリケーション内に何かがあります)。

関連する問題