c++ - Qt 自定义小部件不显示子小部件

标签 c++ qt widget

我有一个自定义小部件,里面有一些标准的子小部件。如果我制作一个单独的测试项目并重新定义我的自定义小部件以继承 QMainWindow,一切都很好。但是,如果我的自定义小部件继承了 QWidget,窗口打开,但里面没有子小部件。

这是代码:

控件.h:

#include <QtGui>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QPushButton>

class Controls : public QWidget
{
    Q_OBJECT

public:
    Controls();

private slots:
    void render();

private:
    QWidget *frame;
    QWidget *renderFrame;
    QVBoxLayout *layout;
    QLineEdit *rayleigh;
    QLineEdit *mie;
    QLineEdit *angle;
    QPushButton *renderButton;
};

控件.cpp:

#include "controls.h"

Controls::Controls()
{
    frame = new QWidget;
    layout = new QVBoxLayout(frame);

    rayleigh = new QLineEdit;
    mie = new QLineEdit;
    angle = new QLineEdit;
    renderButton = new QPushButton(tr("Render"));

    layout->addWidget(rayleigh);
    layout->addWidget(mie);
    layout->addWidget(angle);
    layout->addWidget(renderButton);

    frame->setLayout(layout);
    setFixedSize(200, 400);

    connect(renderButton, SIGNAL(clicked()), this, SLOT(render()));
}

主要.cpp:

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

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    Controls *controls = new Controls();
    controls->show();

    return app.exec();
}

这会打开一个尺寸正确的窗口,但里面没有任何内容。

请记住,这是我第一天使用 Qt。我需要在不继承 QMainWindow 的情况下完成这项工作,因为稍后我需要将它放在 QMainWindow 上。

最佳答案

您缺少顶级布局:

Controls::Controls()
{
    ... (yoour code)

    QVBoxLayout* topLevel = new QVBoxLayout(this);
    topLevel->addWidget( frame );
}

或者,如果 frame 没有在其他任何地方使用,直接:

Controls::Controls()
{
    layout = new QVBoxLayout(this);

    rayleigh = new QLineEdit;
    mie = new QLineEdit;
    angle = new QLineEdit;
    renderButton = new QPushButton(tr("Render"));

    layout->addWidget(rayleigh);
    layout->addWidget(mie);
    layout->addWidget(angle);
    layout->addWidget(renderButton);

    setFixedSize(200, 400);

    connect(renderButton, SIGNAL(clicked()), this, SLOT(render()));
}

请注意,setLayout 是在创建 QLayout 时自动完成的(使用父小部件)

关于c++ - Qt 自定义小部件不显示子小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25596889/

相关文章:

widget - 如何获得 Tk Widget 的子级?

C++如何在不使用额外空间的情况下将二叉树转换为二叉搜索树

c++ - 使用 Qt 枚举转换为 qint32

c++ - iwlib.h : No such file or directory

android - 默认情况下,是否可以在Launcher3中将小部件添加到主屏幕?

android - 小部件上每个按钮的单独待定 Intent

c++ - List sort() vs own sort() 时差

c++ - curl_easy_perform 后接收数据

c++ - Qt QML 中 MouseArea 的网格

c++ - QDockWidgets 合并不正确