好的,所以我做了一些调试。我编写了一个代码,在一个简单的布局管理器中在另一个QFrame上显示我的QFrame。它不起作用。所以问题不在于代码。它只是QFRame无法在QFrame上显示的方式。任何人都知道如何解决这个问题?
/ ********************************************** **以前的行为(IGNORE)***************************************** *************** /
我有一个来自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类型。
答案 0 :(得分:5)
我认为您正在尝试在窗体右侧显示的布局中添加窗口小部件(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中:看看here。
答案 1 :(得分:3)
您需要致电
layout->addWidget(...)
为每个子窗口小部件
layout = new QSomethingLayout(parent)
答案 2 :(得分:1)
只是 QFRAME无法插入QWIDGET 。
我将QFRAME更改为QWIDGET,它运行正常。多谢你们!!