2013-05-28 9 views
1

다운로드 목록에 창 dimanica가 생성됩니다. 하지만 스크롤바가 작동하지 않고 "위젯 어린이"가 "자르기"됩니다.ScrollArea에 위젯 추가

어디에서 문제가있을 수 있습니까? 감사.

출처 :

QWidget *central = new QWidget; 
    QScrollArea *scroll = new QScrollArea; 
    QVBoxLayout *layout = new QVBoxLayout(scroll); 
    scroll->setWidget(central); 
    scroll->setWidgetResizable(true); 

    int i=0; 
    while(i<10){ 
     QWidget *p1 = new QWidget; 
     QHBoxLayout *hl = new QHBoxLayout(p1); 
     QLabel *label1 = new QLabel("test"); 
     QLabel *label2 = new QLabel("0%"); 
     hl->addWidget(label1); 
     hl->addWidget(label2); 
     layout->addWidget(p1); 
     i++; 
    } 

    QMainWindow *w = new QMainWindow; 
    w->setGeometry(50,50,480,320); 
    w->setCentralWidget(scroll); 
    w->show(); 
+0

전에 라인 layout->addStretch();을 추가 바로 라벨 2 선언 후이 줄을 삽입하려고합니다. 어쩌면'QListWidget' 또는'QListView'와'QAbstractListModel' 듀오를 보았을까요? – PrisonMonkeys

답변

5

은 당신의 실수, 당신은 central하지 scroll에 위젯을 layout을 설정해야 찾았

레이블이 이미 사용 가능한 모든 공간을 :

QWidget *central = new QWidget; 
QScrollArea *scroll = new QScrollArea; 
QVBoxLayout *layout = new QVBoxLayout(central); 
scroll->setWidget(central); 
scroll->setWidgetResizable(true); 

편집 , 눈치 채면 label1이 왼쪽에서 시작합니다. bo rder는 중간에서 끝나며 label2은 오른쪽 경계에서 시작하고 끝납니다. 내가 너를 올바르게 이해했다면 은 사용 가능한 모든 공간을 차지하고, label2은 퍼센트로 공간을 필요로하고, 더 이상 필요하지 않습니까?

QSizePolicy 클래스를 읽고 라벨에 setSizePolicy()을 사용하십시오.

QLabel *label2 = new QLabel("0%"); 
label2->setSizePolicy(QSizePolicy::QSizePolicy::Maximum,QSizePolicy::Maximum); 

을 오른쪽 QMainWindow *w = new QMainWindow; 당신이 목록을 만들려고 노력하는 것처럼 보이는

+0

니스,하지만 수평으로 유일한 스트레치가 있습니까? –

+0

지오메트리 (5050480320)를 유지하고 스트레치 레이블이 모든 수평 공간을 차지하겠습니까? – Shf

+0

네, 각 항목 (위젯 자식)이 모든 공간을 가로로 (가로로 만) 차지하도록하고 싶습니다. 당신이 나를 도울 수? 관심을 가져 주셔서 감사합니다. 높이 또는 너비를 고정 할 필요가 없습니다. 창 크기를 조정할 수 있습니다. –