我目前正在研究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);
答案 0 :(得分:1)
我认为您需要将父窗口传递给QWidget构造函数。如果您希望您的小部件显示在MainWindow中,请尝试:
VideoControllers(QWidget *parent, QVBoxLayout &layout) : QWidget(parent)
{
...
}