Виджет, переведенный в пользовательский виджет в QtDesigner, отображается пустым - PullRequest
1 голос
/ 26 февраля 2012

Когда я продвигаю QWidget в пользовательский виджет в QtDesigner, все компилируется нормально, но когда я запускаю программу, виджет кажется пустым. Я сделал очень простую демонстрацию этого:

Form.h

#ifndef FORM_H
#define FORM_H

#include <QWidget>

#include "ui_form.h"

class Form : public QWidget, private Ui::Form
{
Q_OBJECT

public:
  Form(QWidget *parent = 0);
};

#endif

Form.cpp

#include "form.h"

Form::Form(QWidget* parent)
    : QWidget(parent)
{
  setupUi(this);
}

TestWidget.h

#ifndef TestWidget_H
#define TestWidget_H

#include "ui_TestWidget.h"

#include <QMainWindow>

class TestWidget : public QWidget, private Ui::TestWidget
{
  Q_OBJECT

public:
  TestWidget(QWidget *parent = 0);

};

#endif

TestWidget.cpp

#include "TestWidget.h"

TestWidget::TestWidget(QWidget *parent)
    : QWidget(parent)
{

}

main.cpp

#include <QApplication>

#include "form.h"

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  Form form;

  form.show();
  return app.exec();
}

form.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>532</width>
    <height>341</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <widget class="TestWidget" name="widget" native="true">
   <property name="geometry">
    <rect>
     <x>130</x>
     <y>90</y>
     <width>161</width>
     <height>121</height>
    </rect>
   </property>
  </widget>
 </widget>
 <customwidgets>
  <customwidget>
   <class>TestWidget</class>
   <extends>QWidget</extends>
   <header>TestWidget.h</header>
   <container>1</container>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>

TestWidget.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>TestWidget</class>
 <widget class="QWidget" name="TestWidget">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>306</width>
    <height>60</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <layout class="QVBoxLayout" name="verticalLayout">
   <item>
    <widget class="QLabel" name="label">
     <property name="text">
      <string>Current path:</string>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>

Когда я запускаю это, я просто вижу пустой виджет, когда я ожидаю увидеть ярлык с отображением «Текущий путь:».

Ответы [ 2 ]

2 голосов
/ 26 февраля 2012

Мне просто нужно было добавить

setupUi (this);

в конструктор TestWidget.

0 голосов
/ 26 февраля 2012

Если бы я мог комментировать, я бы поставил это там ... мне нужно больше повторений, хотя перед этим есть опция.

Глядя на геометрию TestWidget, я вижу, что он имеет ширину 306 пикселей:

<property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    **<width>306</width>**
    <height>60</height>
   </rect>
  </property>

В Form.ui вы предоставляете ему всего 161 пиксель:

<widget class="TestWidget" name="widget" native="true">
   <property name="geometry">
    <rect>
     <x>130</x>
     <y>90</y>
     **<width>161</width>**
     <height>121</height>
    </rect>
   </property>
  </widget>

Возможно, это часть проблемы - ярлык есть, он находится за пределамизакрашенная область для виджета?

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