qt小部件在添加到另一个小部件时会重叠

Nic*_*ick 3 c++ user-interface qt widget

好的,所以我做了一些调试.我编写了一个代码,在一个简单的布局管理器中在另一个QFrame上显示我的QFrame.它不起作用.所以问题不在于代码.它只是QFRame无法在QFrame上显示的方式.有人知道怎么修这个东西吗??

/************************************************先前STUFFFFFFFF(忽略)************************/

我有一个来自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);
Run Code Online (Sandbox Code Playgroud)

这是输出..而不是看到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
Run Code Online (Sandbox Code Playgroud)

我添加的小部件是QFrame类型.

doc*_*eer 5

我想您正在尝试在窗体右侧显示的布局中添加窗口小部件(displaypanel.ui中右侧的红色矩形.首先通过单击UI设计器中的红色矩形并查看该布局来确定布局的调用方式物业检查员.我猜它叫做horizo​​ntalLayout.

您可以从代码中访问此布局,并将它们添加到这里,假设您在此类中使用了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);
Run Code Online (Sandbox Code Playgroud)

另一种方法是将它们作为窗口小部件添加到窗体中,然后将窗口小部件提升为类型LightWidget:看看这里.