下面我展示了一个完整的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()
{
}
答案 0 :(得分:2)
在此特定代码中,问题是您调用
scrollArea->setWidget(widget);
在添加窗口小部件的布局之前。 将上述调用移至构造函数的末尾,您会在scrollarea 中看到标签和按钮。
QScrollArea::setWidget文档中也提到了这一点:
请注意,您必须在调用之前添加窗口小部件 功能;如果你以后添加它,小部件将不可见 - 无论何时显示()滚动区域。