【问题标题】:Opening a Widget created in Designer, from a Main Window从主窗口打开在 Designer 中创建的小部件
【发布时间】:2016-06-28 20:04:02
【问题描述】:

我创建了 2 个.ui 文件,一个是主窗口,另一个是小部件。 Designer 会生成 2 个.header 文件,每个文件的类声明周围都有QT_BEGIN_NAMESPACE

问题是,在打开我的主窗口时有效,在打开第二个窗口小部件窗口时无效。

为了显示我的主窗口,我创建了一个继承自 .ui 文件的类:

  class myWindow: public QMainWindow, private Ui::uiClassWindow
  setupUi(this);

打开很好,然后打开第二个小部件窗口,我声明一个通用小部件对象,然后用指向我的 Widget Ui 头文件的指针保存它:

  QWidget newWidget;
  setupUi(newWidget)

但是setupUi 解析为我的主窗口头文件...我如何告诉它使用小部件的setupUi

有没有更好的方法来解决这个问题?

【问题讨论】:

  • 你可以使用类名来限定调用吗?即OtherWidgetUI::setupUi(newWidget);?

标签: qt qt-designer


【解决方案1】:

据我所知,setupUi 函数是在 Ui 命名空间中定义的。您还需要为其他小部件提供范围 (Ui)。

【讨论】:

    【解决方案2】:

    setupUi() 方法是由 uic 从您的 UI 文件中创建的,每个编译后的 UI 都不同。

    在您的myWindow 中,您继承自Ui::uiClassWindow 并且可以使用其setupUi() 方法而无需限定。您需要为 newWidget 提供不同 UI 类的实例:

    auto widget_ui = new Ui::myWidget;
    QWidget newWidget;
    widget_ui->setupUi(newWidget)
    

    如果需要,您可以立即 deletewidget_ui - 但通常,您需要保留它才能访问它现在在 newWidget 中创建的子代。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多