具有多个QWidgets的QScrollArea仅显示空框

时间:2012-12-11 11:24:22

标签: c++ qt user-interface

我正在尝试创建一个可以显示一些信息的小部件。每个信息都是一个包含多个带文本(信息)的QLabel的QWidget。我的想法是将多个(这些数组)放入QScrollArea中,以便用户可以上下滚动查看它们。以下代码:

InfoWidget::InfoWidget(QWidget* parent) : QWidget(parent){
    widgets = new QVector<MarkerInfoWidget*>();
    csv_data = 0;
    csv_velocity = 0;
    labels = 0;
    infoWidgetLayout = new QVBoxLayout(this);
    setLayout(infoWidgetLayout);
    scrollArea = new QScrollArea(this);
    scrollWidgetLayout = new QVBoxLayout(scrollArea);
    scrollArea->setLayout(scrollWidgetLayout);
    infoWidgetLayout->addWidget(scrollArea);
    //Test
    QString name = "TEST";
    for(int i=0; i<10; i++){
        MarkerInfoWidget* markerWidget = new MarkerInfoWidget(name, scrollArea);
        scrollWidgetLayout->addWidget(markerWidget);
        widgets->append(markerWidget);
    }
}

MarkerInfoWidget和InfoWidget都扩展了QWidget。我得到的只是一个文字非常小的框:

small Text Example

如果我将其拖出并重新调整大小,则会正确显示:

Re-sized example

我注意到的是,如果我将它调整得太小,它就不会产生滚动。我需要解决这个问题?

1 个答案:

答案 0 :(得分:3)

我想改变:

scrollArea->setLayout(scrollWidgetLayout);

表示:

QFrame* frame = new QFrame(scrollArea);
frame->setLayout(scrollWidgetLayout);
scrollArea->setWidget(frame);

据我所知,您必须将widget放入QScrollableArea才能使其真正可滚动。设置它的布局可能不是你想要做的事情。