在QtDesigner中提升为自定义窗口小部件的窗口小部件显示为空白

时间:2012-02-25 23:35:11

标签: qt qt4

当我在QtDesigner中将QWidget提升为自定义小部件时,一切都编译得很好,但是当我运行程序时,小部件似乎是空白的。我做了一个非常简单的演示:

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 个答案:

答案 0 :(得分:2)

我只需要添加

setupUi(本);

到TestWidget构造函数。

答案 1 :(得分:0)

如果我能够发表评论,我会把它放在那里......虽然在此之前需要更多代表仍然是一个选项。

查看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>

可能是问题的一部分 - 标签在那里,它就在窗口小部件的绘制区域之外?