Виджеты qt перекрываются при добавлении в другой виджет - PullRequest
3 голосов
/ 25 июля 2011

Хорошо, я выполнил некоторую отладку. Я написал код для отображения моего QFrame на другом QFrame в простом менеджере макетов. Это не работает. Так что проблема не в коде. Это просто способ, которым QFRame не может быть отображено на QFrame. Кто-нибудь знает, как это исправить ??

/ ********************************************** ** ПРЕДЫДУЩАЯ ШТУФФФФФФФФ (игнорируется) ******************************************** *************** /

У меня есть класс из класса 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 зеленых кружков, я вижу их все слева поверх других.

enter image description here

Cheers, Ник

Это код формы пользовательского интерфейса ... по запросу ...

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.

Ответы [ 3 ]

5 голосов
/ 25 июля 2011

Я думаю, что вы пытаетесь добавить виджеты в макет, показанный справа от вашей формы (красный прямоугольник справа в displaypanel.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: взгляните здесь .

3 голосов
/ 25 июля 2011

Вам нужно позвонить

layout->addWidget(...)

для каждого дочернего виджета, где

layout = new QSomethingLayout(parent)
1 голос
/ 26 июля 2011

Просто QFRAME МОЖЕТ БЫТЬ ВСТАВЛЕНО В QWIDGET .

Я изменил свой QFRAME на QWIDGET, и он работает нормально.Спасибо, парни!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...