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