2013-05-28 71 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();。也許看看'QListWidget'或'QListView'和'QAbstractListModel'二重奏? – PrisonMonkeys

回答

5

發現你的錯誤,你應該設置layout到窗口小部件centralscroll

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

編輯:

您的標籤已採取一切可用的空間,如果你注意到,label1從左邊開始rder結束於中間,其中label2開始和結束在右邊界。如果我的理解正確,你想label1採取所有可用的空間,而label2百分比只需要什麼空間,沒有更多?

閱讀關於QSizePolicy類,並在標籤上使用setSizePolicy()。嘗試LABEL2聲明之後插入此行:

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

而且QMainWindow *w = new QMainWindow;

+0

不錯,但是隻有橫向延伸? –

+0

你想保持幾何(50,50,480,320)和拉伸標籤佔據所有的水平空間? – Shf

+0

是的,我希望每個項目(Widget子項)水平佔據所有空間(僅限水平)。你可以幫幫我嗎?感謝您的關注。不需要固定高度或寬度。窗口可以調整大小。 –