QScrollArea内容未显示

时间:2016-02-23 18:37:00

标签: qt

下面我展示了一个完整的Qt项目,我希望看到一个标签和按钮显示在滚动区域中,但似乎我并没有像Qt所期望的那样表达自己。 Qt期望什么?

project.pro

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = untitled13
TEMPLATE = app


SOURCES += main.cpp\
        widget.cpp

HEADERS  += widget.h

的main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"

#include <QHBoxLayout>
#include <QScrollArea>
#include <QLabel>
#include <QPushButton>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QHBoxLayout *mainLayout = new QHBoxLayout(this);

    QScrollArea *scrollArea = new QScrollArea;
    mainLayout->addWidget(scrollArea);

    QWidget *widget = new QWidget;
    scrollArea->setWidget(widget);

    QHBoxLayout *hLayout = new QHBoxLayout;
    widget->setLayout(hLayout);

    QLabel *label = new QLabel("somelable");
    hLayout->addWidget(label);

    QPushButton *bt = new QPushButton("click");
    hLayout->addWidget(bt);
}

Widget::~Widget()
{

}

1 个答案:

答案 0 :(得分:2)

在此特定代码中,问题是您调用

scrollArea->setWidget(widget);
在添加窗口小部件的布局之前

将上述调用移至构造函数的末尾您会在scrollarea 中看到标签和按钮。

QScrollArea::setWidget文档中也提到了这一点:

  

请注意,您必须在调用之前添加窗口小部件   功能;如果你以后添加它,小部件将不可见 -   无论何时显示()滚动区域。