将小部件添加到ScrollArea

时间:2013-05-28 15:10:07

标签: qt layout qwidget qscrollarea

我正在为下载列表创建一个窗口dimanica。 但滚动条不起作用,“小部件儿童”被“剪掉”。

我哪里可以错?感谢。

来源:

    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();

1 个答案:

答案 0 :(得分:6)

发现您的错误,您应将layout设置为小工具central而不是scroll

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

编辑:

您的标签已占用所有可用空间,如果您注意到,label1从中间的左边框开始,label2开始和结束于右边框。如果我理解正确,您希望label1占用所有可用空间,而label2只占用百分比,只需要占用多少空间,不再需要?

了解QSizePolicy课程,并在标签上使用setSizePolicy()。尝试在label2声明后插入此行:

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

layout->addStretch();

之前添加行QMainWindow *w = new QMainWindow;