2010-11-24 6 views
0

おはよう、 QWidgetsとレイアウトをメインレイアウトにレイアウトする必要がありますが、削除できないスペースに問題があります。 基本的には、グリッドレイアウトといくつかのボタン(すべて水平線)を含む横縞レイアウトです。グリッドレイアウト(2x2)には、2つのQラベルと2つのQLedが含まれています。 残念なことにQtは、ここに添付の画像で確認できるように、グリッドレイアウトと最初のボタンの間にスペースを入れますhttp://img413.imageshack.us/img413/9132/problemhu.png 私はそのようなスペースを削除します。 ここでコードが私が書いた: Qtレイアウトで問題が発生しましたが、スペースを削除できません

QGridLayout* gl = new QGridLayout(); 
gl->setAlignment(Qt::AlignLeft); 
gl->setContentsMargins(0, 0, 0, 0); 
gl->addWidget(activeLabel, 0, 0); 
gl->addWidget(m_focusLed, 0, 1); 
gl->addWidget(encodingLabel, 1, 0); 
gl->addWidget(m_encodingLed, 1, 1); 

この

は、グリッドレイアウトを作成し、その上にQLabelsとQLedsを追加しました。 は、その後、私はそうは水平レイアウトにボタンを追加します。

/* layout buttons */ 
    QHBoxLayout* lo = new QHBoxLayout(); 
    lo->setSpacing(0); 
    lo->addLayout(gl); // <--here I add the grid layout 
    lo->addWidget(m_goToBeginBtn); 
    lo->addWidget(m_goToEndBtn); 
    lo->addWidget(m_frewBtn); 
    lo->addWidget(m_fforBtn); 
    lo->addSpacing(10); 
    lo->addWidget(m_ffrewBtn); 
    lo->addWidget(m_ffforBtn); 
    lo->addSpacing(10); 
    lo->addWidget(m_prevBtn); 
    lo->addWidget(m_nextBtn); 
    lo->addWidget(m_playBtn); 
    lo->addWidget(m_stopBtn); 
    lo->addWidget(m_cutBtn); 
    lo->addSpacing(10); 
    lo->addWidget(m_zoomInBtn); 
    lo->addWidget(m_zoomOutBtn); 
    lo->addSpacing(10); 
    lo->addWidget(m_bgSndCheckBox); 
    lo->addWidget(m_showPanelBtn); 

私はグリッドレイアウトと最初のボタンの間に、なぜQtの場所、そのようなスペースを知りません。私はそれを削除します。どのようにできるのか?私はQtメーリングリストの助けを借りていませんでした。

よろしくお願いします。

答えて

1

どのような問題を解決するかは、どのような動作を見たいかによって異なります。私はあなたが欲しいものを推測しているのは、レーベルとLedがどこにいるかを正確に把握し、サイズを維持することです。

グリッドレイアウトがウィンドウで(ボタンのように)サイズ変更されていますが、左揃えではコントロールが左に固定されているため、スペースが残っています。

まず、gl-> setAlignment(Qt :: AlignLeft)行を削除します。

第2に、QLabelとQLedの両方でsizePolicyが正しく設定されていることを確認する必要があります。そうしないと、QLedのサイズが水平方向に変更されてしまう可能性があります。あなたが望むのは、固定された水平サイズのポリシーです。次に例を示します。

QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); 
sizePolicy.setHeightForWidth(label->sizePolicy().hasHeightForWidth()); 
label->setSizePolicy(sizePolicy); 

あなたの横レイアウトにsetStretch()への呼び出しの束を追加することです同じことを達成するために完全に異なる方法。しかし、ストレッチしたいレイアウトの列ごとにこれを行う必要があります。基本的に各ボタンごとに、最初の列のグリッドレイアウトはスキップします。このように...

lo->setStretch(1, 1); // Column 1 is your first button 
lo->setStretch(2, 1); 
... 
lo->setStretch(19, 1)l // 19 columns in total, 15 buttons plus 4 spacing. 
+0

ありがとう – Franco

関連する問題