gpt4 book ai didi

c++ - Qt5 自定义小部件

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:13:01 24 4
gpt4 key购买 nike

我目前正在开发 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

这是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);
}

奇怪的是,当我不使用成员(member)数据小部件时,一切正常。

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

这段代码向我显示了 GroupBox,但没有显示其中的元素,而另一个则没有。

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

也请告诉我是否有其他帖子像我一样,我不知道要搜索什么...:/

对不起英语

我找到的解决方案:

我是这样初始化我的 Controller 的:

 VideoControllers vControls(*controlPanelLayout);

使用指针解决了问题:

 VideoControllers *vControls = new VideoControllers(*controlPanelLayout);

最佳答案

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com