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++ 当添加到另一个小部件时,qt小部件重叠_C++_Qt_User Interface_Widget - Fatal编程技术网

C++ 当添加到另一个小部件时,qt小部件重叠

C++ 当添加到另一个小部件时,qt小部件重叠,c++,qt,user-interface,widget,C++,Qt,User Interface,Widget,好的,我已经做了一些调试。我编写了一个代码,在一个简单的布局管理器中的另一个QFrame上显示我的QFrame。它不起作用。所以问题不在于代码。这就是QFRame不能在QFRame上显示的方式。有人知道如何解决这个问题吗??? /************************************************先前填充FFFFFF(忽略)**********************************************************/ 我有一个来自QWidget

好的,我已经做了一些调试。我编写了一个代码,在一个简单的布局管理器中的另一个QFrame上显示我的QFrame。它不起作用。所以问题不在于代码。这就是QFRame不能在QFRame上显示的方式。有人知道如何解决这个问题吗???

/************************************************先前填充FFFFFF(忽略)**********************************************************/

我有一个来自QWidget类的类,但我想将5个小部件的列表添加到顶级小部件中

当我添加它们时,它们似乎是重叠的,即使我以水平布局排列它们

是否有我未设置或遗漏的参数

图片有5个小部件空间,在运行时我创建小部件并填充它们。但当我这样做的时候,由于某种原因,他们在左边变得拥挤

sensor1 = new LightWidget(green, this);
sensor2 = new LightWidget(green, this);
sensor3 = new LightWidget(green, this);
sensor4 = new LightWidget(green, this);
sensor5 = new LightWidget(green, this);
这是输出。。我没有看到5个绿色圆圈,而是看到它们都在左边的另一个上面

干杯, 尼克

这是UI表单代码。。。应要求

void setupUi(QWidget *Form)
{
    if (Form->objectName().isEmpty())
        Form->setObjectName(QString::fromUtf8("Form"));
    Form->resize(762, 150);
    QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
    sizePolicy.setHorizontalStretch(0);
    sizePolicy.setVerticalStretch(0);
    sizePolicy.setHeightForWidth(Form->sizePolicy().hasHeightForWidth());
    Form->setSizePolicy(sizePolicy);
    Form->setMinimumSize(QSize(700, 150));
    Form->setMaximumSize(QSize(16777215, 150));
    layoutWidget = new QWidget(Form);
    layoutWidget->setObjectName(QString::fromUtf8("layoutWidget"));
    layoutWidget->setGeometry(QRect(10, 20, 721, 101));
    layout = new QHBoxLayout(layoutWidget);
    layout->setObjectName(QString::fromUtf8("layout"));
    layout->setContentsMargins(0, 0, 0, 0);
    dataLayout = new QVBoxLayout();
    dataLayout->setObjectName(QString::fromUtf8("dataLayout"));
    posLayout = new QHBoxLayout();
    posLayout->setObjectName(QString::fromUtf8("posLayout"));
    posLabel = new QLabel(layoutWidget);
    posLabel->setObjectName(QString::fromUtf8("posLabel"));

    posLayout->addWidget(posLabel);

    posValue = new QLabel(layoutWidget);
    posValue->setObjectName(QString::fromUtf8("posValue"));
    posValue->setMaximumSize(QSize(16777215, 16777215));

    posLayout->addWidget(posValue);


    dataLayout->addLayout(posLayout);

    speedLayout = new QHBoxLayout();
    speedLayout->setObjectName(QString::fromUtf8("speedLayout"));
    speedLabel = new QLabel(layoutWidget);
    speedLabel->setObjectName(QString::fromUtf8("speedLabel"));

    speedLayout->addWidget(speedLabel);

    speedValue = new QLabel(layoutWidget);
    speedValue->setObjectName(QString::fromUtf8("speedValue"));

    speedLayout->addWidget(speedValue);


    dataLayout->addLayout(speedLayout);

    angleLayout = new QHBoxLayout();
    angleLayout->setObjectName(QString::fromUtf8("angleLayout"));
    angleLabel = new QLabel(layoutWidget);
    angleLabel->setObjectName(QString::fromUtf8("angleLabel"));

    angleLayout->addWidget(angleLabel);

    angleValue = new QLabel(layoutWidget);
    angleValue->setObjectName(QString::fromUtf8("angleValue"));

    angleLayout->addWidget(angleValue);


    dataLayout->addLayout(angleLayout);


    layout->addLayout(dataLayout);

    sensorLayout = new QHBoxLayout();
    sensorLayout->setObjectName(QString::fromUtf8("sensorLayout"));
    sensor1 = new LightWidget(layoutWidget);
    sensor1->setObjectName(QString::fromUtf8("sensor1"));
    sensor1->setEnabled(true);

    sensorLayout->addWidget(sensor1);

    sensor2 = new LightWidget(layoutWidget);
    sensor2->setObjectName(QString::fromUtf8("sensor2"));

    sensorLayout->addWidget(sensor2);

    sensor3 = new LightWidget(layoutWidget);
    sensor3->setObjectName(QString::fromUtf8("sensor3"));

    sensorLayout->addWidget(sensor3);

    sensor4 = new LightWidget(layoutWidget);
    sensor4->setObjectName(QString::fromUtf8("sensor4"));

    sensorLayout->addWidget(sensor4);

    sensor5 = new LightWidget(layoutWidget);
    sensor5->setObjectName(QString::fromUtf8("sensor5"));

    sensorLayout->addWidget(sensor5);


    layout->addLayout(sensorLayout);


    retranslateUi(Form);

    QMetaObject::connectSlotsByName(Form);
} // setupUi
我添加的小部件属于QFrame类型。

您需要调用

layout->addWidget(...)
对于每个子窗口小部件,其中

layout = new QSomethingLayout(parent)

我认为您正在尝试将小部件添加到表单右侧的布局中(displaypanel.ui中右侧的红色矩形)。首先,通过单击ui设计器中的红色矩形并查看属性检查器来确定该布局的名称。我猜它被称为horizontalLayout

您可以从代码中访问此布局,并在其中添加类似的内容,前提是在执行此操作的类中有一个Ui::yourform对象

sensor1 = new LightWidget(green, this);
sensor2 = new LightWidget(green, this);
sensor3 = new LightWidget(green, this);
sensor4 = new LightWidget(green, this);
sensor5 = new LightWidget(green, this);
this->ui.horizontalLayout->addWidget(sensor1);
this->ui.horizontalLayout->addWidget(sensor2);
this->ui.horizontalLayout->addWidget(sensor3);
this->ui.horizontalLayout->addWidget(sensor4);
this->ui.horizontalLayout->addWidget(sensor5);

另一种方法是将它们作为小部件添加到表单中,然后将小部件升级为键入LightWidget:看一看。

只是QFRAME不能插入到QWIDGET上


我将QFRAME改为QWIDGET,效果很好。谢谢大家!!

这里没有太多信息。代码、屏幕截图?好的,我将代码和gui输出放在那里。谢谢!传感器在哪里,如何安装[1-5]声明的变量?它们在ui表单中。gui中的5个框来自ui表单。我正在扩展gui表单并添加小部件。但是ui不是已经处理好了吗?sensor1,2,…都是添加到gui中的小部件。我只是在这里用LightWidgets初始化小部件。如果您在代码中创建小部件,而不是代码,则由d生成esigner,你应该这么做我试过了我还是得到了同样的结果我看到它们重叠了(修改后的代码与您的代码相同,但也发布了ui表单代码。我尝试升级并执行此操作,但这次我甚至没有看到小部件,甚至没有重叠。我认为它们正在隐藏。有什么想法吗?如果您使用升级,您不应该需要调用
new LightWidget()的代码)
-从UI编译器生成的代码将执行此操作。请注意,它将调用默认构造函数,如
new LightWidget(QObject*parent)
,而不会像您在此处所做的那样传入绿色-因此您可能需要在其他地方设置颜色。我也这样做了,但由于某些原因,它们现在不会出现在框架上。真的很奇怪。