我正在为下载列表创建一个窗口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();
答案 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;