4

I am creating a window dimanica to the downloads list. But the scrollbar does not work and the "widgets children" are "cut".

Where can I be wrong? Thanks.

Source:

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

1 回答 1

7

发现你的错误,你应该将layout小部件设置centralscroll

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;

于 2013-05-28T19:10:40.370 回答