Qt5自定义小部件

时间:2016-06-19 11:21:01

标签: c++ qt widget

我目前正在研究Qt软件,并且为了正确制作我选择创建一些" custom"小部件(不是)。 我的自定义小部件"通常只是一个包含很多小部件的简单类。 我这样做是因为我不想在我的主窗口中存储所有这些糟糕的代码行(到init小部件)。

问题是: 当我在其他课程中初始化小部件时,它们不会显示在我的主窗口中。 我给我的其他类提供了对主窗口布局的引用(所以我可以修改它)

以下是一个例子:

#ifndef VIDEOCONTROLLERS_H
#define VIDEOCONTROLLERS_H

#include <QGroupBox>
#include <QLayout>
#include <QPushButton>

class VideoControllers : QWidget
{

public:
    VideoControllers(QVBoxLayout &layout);

private:
    QGroupBox _vBox;
    QPushButton _vSpeedDownButton;
    QPushButton _vPrevFrameButton;
    QPushButton _vPlayButton;
    QPushButton _vNextFrameButton;
    QPushButton _vSpeedUpButton;


signals:

public slots:
};

#endif // VIDEOCONTROLLERS_H

这是cpp

#include "VideoControllers.hpp"

VideoControllers::VideoControllers(QVBoxLayout& layout) :
    _vSpeedDownButton("s-"),
    _vPrevFrameButton("f-"),
    _vPlayButton("p"),
    _vNextFrameButton("f+"),
    _vSpeedUpButton("s+")
{
    _vBox.setTitle("Video nav");

    QHBoxLayout *globalLayout = new QHBoxLayout;

    globalLayout->addWidget(&_vSpeedDownButton);
    globalLayout->addWidget(&_vPrevFrameButton);
    globalLayout->addWidget(&_vPlayButton);
    globalLayout->addWidget(&_vNextFrameButton);
    globalLayout->addWidget(&_vSpeedUpButton);

    _vBox.setLayout(globalLayout);
    layout.addWidget(&_vBox);
}

关于这一点的奇怪之处在于,当我没有使用成员数据小部件时,一切正常。

QGroupBox *vBox = new vBox("Video nav");
layout.addWidget(vBox);

此代码显示GroupBox,但不显示其中的元素,而另一个不是。

我是新手,但我不知道为什么我的objetc没有显示。

另外请告诉我,如果有其他类似我的帖子,我也不知道该搜索什么......:/

对不起英文

解决方案我发现:

我正在初始化我的控制器:

 VideoControllers vControls(*controlPanelLayout);

使用指针解决了问题:

 VideoControllers *vControls = new VideoControllers(*controlPanelLayout);

1 个答案:

答案 0 :(得分:1)

我认为您需要将父窗口传递给QWidget构造函数。如果您希望您的小部件显示在MainWindow中,请尝试:

VideoControllers(QWidget *parent, QVBoxLayout &layout) : QWidget(parent)
{
...
}