Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt5自定义小部件_C++_Qt_Widget - Fatal编程技术网

C++ Qt5自定义小部件

C++ Qt5自定义小部件,c++,qt,widget,C++,Qt,Widget,我目前正在开发一个Qt软件,为了使事情正常进行,我选择创建一些“自定义”小部件(它们不是)。 我的“自定义小部件”通常只是一个简单的类,里面有很多小部件。 我这样做是因为我不想在我的主窗口中存储所有这些糟糕的代码行(初始化小部件) 问题是: 当我在另一个类中初始化小部件时,它们不会显示在我的主窗口中。 我给我的其他类一个主窗口布局的引用(这样我就可以修改它) 以下是一个例子: #ifndef VIDEOCONTROLLERS_H #define VIDEOCONTROLLERS_H #incl

我目前正在开发一个Qt软件,为了使事情正常进行,我选择创建一些“自定义”小部件(它们不是)。 我的“自定义小部件”通常只是一个简单的类,里面有很多小部件。 我这样做是因为我不想在我的主窗口中存储所有这些糟糕的代码行(初始化小部件)

问题是: 当我在另一个类中初始化小部件时,它们不会显示在我的主窗口中。 我给我的其他类一个主窗口布局的引用(这样我就可以修改它)

以下是一个例子:

#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
奇怪的是,当我不使用成员数据小部件时,一切正常

QGroupBox *vBox = new vBox("Video nav");
layout.addWidget(vBox);
此代码向我显示GroupBox,但不显示其中的元素,而另一个则不显示

我是这方面的新手,但我不明白为什么我的对象不显示

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

对不起,我说的是英语

我找到的解决方案:

我是这样初始化我的控制器的:

 VideoControllers vControls(*controlPanelLayout);
使用指针解决了问题:

 VideoControllers *vControls = new VideoControllers(*controlPanelLayout);

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

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

我认为你应该使用QMainWindow的一个子类作为基类,初始化所有小部件,并将
This
作为父类,然后在那里进行所有初始化。show()这所有其他小部件都使用itI进行初始化,但这是一些糟糕的代码,所有模块都在同一个子类中进行初始化。它太大了,不可维护。我找到了解决问题的办法。那么问题出在哪里呢?另外,我从Qt文档中了解到,我使用构造函数初始化的方法,这是一个坏主意,我想…“我使用构造函数初始化,这是一个坏主意,我想”没有这样的事情。您所做的是为
VideoControllers
创建一个短暂的自动存储作用域实例,该实例在作用域退出后立即消失。很可能您也不需要显式的堆分配,但是您没有向我们展示足够的代码来了解如何解决这个问题。很可能您想要
VideoControllers
作为某个类中的成员,或者可能是
main()
中的自动变量。
VideoControllers(QWidget *parent, QVBoxLayout &layout) : QWidget(parent)
{
...
}