2013-08-30 7 views
0

나는 QVBoxLayout을 포함하는 QWidget을 가지고 있으며 그 레이아웃에는 QLabel과 QToolButtons가 있습니다. 제 문제는 QLabel이 모든 공간을 차지한다는 것입니다. 내가 찾은 유일한 해결책은 QLabel에 maximumHeight를 설정하는 것이지만, 그렇게하면 Qt :: AlignTop이 더 이상 작동하지 않습니다.QLabel은 전체 공간을 사용합니다

MAIN.CPP :

여기
int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QWidget window_main; 

    QWidget *widget_steps = new QWidget(&window_main); 
    widget_steps->setFixedWidth(75); 
    widget_steps->move(QPoint(0, 0)); 
    widget_steps->setStyleSheet("background-color: red;"); 

    QVBoxLayout *layout_steps = new QVBoxLayout(widget_steps); 
    layout_steps->setContentsMargins(0, 0, 0, 0); 
    layout_steps->setSpacing(0); 

    QLabel *label_steps_start = new QLabel("steps:"); 
    label_steps_start->setAlignment(Qt::AlignHCenter | Qt::AlignTop); 
    label_steps_start->setStyleSheet("background-color: blue;"); 
    layout_steps->addWidget(label_steps_start); 

    QToolButton *tbutton_step1 = new QToolButton(); 
    layout_steps->addWidget(tbutton_step1); 

    QToolButton *tbutton_step2 = new QToolButton(); 
    layout_steps->addWidget(tbutton_step2); 

    QToolButton *tbutton_step3 = new QToolButton(); 
    layout_steps->addWidget(tbutton_step3); 


    window_main.showMaximized(); 

    return a.exec(); 
} 

QLable가 (파란색 공간)을 차지하는 공간을 보여줍니다 사진 : QLabel_space

그래서 QLable 소요되는 공간을 최소화하기 위해 도와주세요 :)

+0

에서 [라벨 신장 인자 (http://harmattan-dev.nokia.com/docs/library/html/qt4/qboxlayout.html?tab=3&q=QHBoxLayout#addWidget) 설정 될 수있다 'QVBoxLayout'에서. – frsfnrrg

+0

그는 이미 그것이 좋지 않은 이유를 말했다. – lpapp

+0

나는 facor를 음의 값이나 null로 설정했는지 여부에 상관없이 strech factor가 도움이되지 못했다. – XoR

답변

0

귀하의 문제는, 라벨이 유일한 유형 인 도구 버튼 따라서 고정 된 크기를 가지고 있고, 즉 그 성장할 수 : 따라서 : 를 레이블을 추가 한 후, 레이아웃에 스트레치를 추가

layout_steps->addWidget(label_steps_start); 
layout_steps->addStretch(); 

수정 된 코드 - 하단에 스트레치를 추가합니다. 라벨 크기는 고정되어 있으며 버튼은 그 아래에 있습니다. 테스트를 위해 외부의 주 창 전체를 제거했습니다.

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QWidget *widget_steps = new QWidget; 
    widget_steps->setFixedWidth(75); 
    widget_steps->move(QPoint(0, 0)); 
    widget_steps->setStyleSheet("background-color: red;"); 

    QVBoxLayout *layout_steps = new QVBoxLayout(widget_steps); 
    layout_steps->setContentsMargins(0, 0, 0, 0); 
    layout_steps->setSpacing(0); 

    QLabel *label_steps_start = new QLabel("steps:"); 
    label_steps_start->setAlignment(Qt::AlignHCenter | Qt::AlignTop); 
    label_steps_start->setStyleSheet("background-color: blue;"); 
    layout_steps->addWidget(label_steps_start); 
    //--- Removed.... layout_steps->addStretch(); 

    QToolButton *tbutton_step1 = new QToolButton(); 
    layout_steps->addWidget(tbutton_step1); 

    QToolButton *tbutton_step2 = new QToolButton(); 
    layout_steps->addWidget(tbutton_step2); 

    QToolButton *tbutton_step3 = new QToolButton(); 
    layout_steps->addWidget(tbutton_step3); 
    layout_steps->addStretch(); //<----- Added! 
    widget_steps->show(); 

    return a.exec(); 
} 
+0

니스, 지금까지 작동하지만 지금은 하단에 머물러 있습니다. 어떻게하면 단추의 정렬을 변경할 수 있습니까 (setAlign 기능이 없음)? – XoR

+0

추가 할 때 세 번째 매개 변수는 내 답장에 표시된 정렬입니다. 내가 mods, btw로 내 답장을 완전히 확인 했니? – lpapp

+0

어쩌면 지금 답변을 편집 한 후에 작동합니다. – XoR

1

당신이 할 수있는 한 가지 방법은 QVBoxLayout 내부의 특정 위젯에 대한 늘림 인수를 설정하는 것입니다. 그 문서는 here에 있습니다. 당신이 위젯을 추가 할 때 기본적으로

, 당신은 예를 들어, 그 설정할 수 있습니다 크기 조절시

#include <QtWidgets/QApplication> 
#include <QtWidgets/QLabel> 
#include <QtWidgets/QToolButton> 
#include <QtWidgets/QVBoxLayout> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QWidget window_main; 

    QWidget *widget_steps = new QWidget(&window_main); 
    widget_steps->setFixedWidth(75); 
    widget_steps->move(QPoint(0, 0)); 
    widget_steps->setStyleSheet("background-color: red;"); 

    QVBoxLayout *layout_steps = new QVBoxLayout(widget_steps); 
    layout_steps->setContentsMargins(0, 0, 0, 0); 
    layout_steps->setSpacing(0); 

    QLabel *label_steps_start = new QLabel("steps:"); 
    label_steps_start->setAlignment(Qt::AlignHCenter | Qt::AlignTop); 
    label_steps_start->setStyleSheet("background-color: blue;"); 
    layout_steps->addWidget(label_steps_start, 3, Qt::AlignTop); 
    layout_steps->addStretch(); 

    QToolButton *tbutton_step1 = new QToolButton(); 
    layout_steps->addWidget(tbutton_step1, 1); 

    QToolButton *tbutton_step2 = new QToolButton(); 
    layout_steps->addWidget(tbutton_step2, 1); 

    QToolButton *tbutton_step3 = new QToolButton(); 
    layout_steps->addWidget(tbutton_step3, 1); 


    window_main.showMaximized(); 

    return a.exec(); 
} 
+0

나를 위해 도움이되지 않았다. 나는 "layout_steps-> setStretchFactor (label_steps_start, -1);"시도했다 " "layout_steps-> setStretchFactor (label_steps_start, 0);"와 같이 사용됩니다. 변경된 사항이 없습니다 ... – XoR

+0

광고 거래와 함께 하시겠습니까? – lpapp

+0

방금 ​​전에 설명한대로 strechFactor를 addWidget 함수에 추가하고 다른 코드를 변경하지 마십시오. -> 아무 일도 없었습니다 – XoR