带有 .ui 文件的 QT5 自定义小部件 - 显示时需要调用 Ui::myWidget.setupUi

Posted

技术标签:

【中文标题】带有 .ui 文件的 QT5 自定义小部件 - 显示时需要调用 Ui::myWidget.setupUi【英文标题】:QT5 custom widget with .ui file - calling Ui::myWidget.setupUi required when displaying it 【发布时间】:2022-01-12 21:53:09 【问题描述】:

我使用.ui 文件创建了QT 自定义小部件MyWidget。但是当我在 QT 设计器中将 QWidget 放置到 MainWindow 并将其提升为 MyWidget 时,它只会呈现一个空的小部件

我知道为什么它不起作用。在函数setupUi 中生成的文件ui_mainwindow.h 中是用于显示我的小部件的代码如下:

widget = new MyWidget(centralWidget);
widget->setObjectName(QString::fromUtf8("widget"));
verticalLayout->addWidget(widget);

当我调用Ui::MyWidget.setupUi(将上面的代码替换为以下代码)时,它可以工作:

widget = new MyWidget(centralWidget);
Ui::MyWidget uiOfWidget;
uiOfWidget.setupUi(widget);
widget->setObjectName(QString::fromUtf8("widget"));
verticalLayout->addWidget(widget);

所以我的问题是,如何才能达到以下条件之一:

编译MainWindow.ui文件时自动生成这样的代码 无需调用Ui::MyWidget.setupUi 或其他修复...?

我使用 QT5。谢谢!

【问题讨论】:

通常我在 MyWidget 的构造函数中调用 setupUi 就像我对使用 .ui 的任何其他小部件所做的那样 【参考方案1】:

正如@drescherjm所指出的,解决方案是在MyWidget的构造函数中调用Ui::MyWidget.setupUi

MyWidget::MyWidget(QWidget* parent, Qt::WindowFlags f): QWidget(parent, f) 
    Ui::MyWidget ui;
    ui.setupUi(this);

【讨论】:

以上是关于带有 .ui 文件的 QT5 自定义小部件 - 显示时需要调用 Ui::myWidget.setupUi的主要内容,如果未能解决你的问题,请参考以下文章

Qt Designer - 只生成一个带有多个小部件的 .ui 文件

使用我的 QT5 自定义小部件调整 QGroupBox 大小

从主窗口中的 UI 文件加载带有信号槽定义的小部件

如何将 QGraphicsView 提升为 .ui 文件中的自定义小部件?

是否可以在 Qt Designer 中使用来自 Qt Designer 的 .ui 文件作为自定义小部件?

Qt5 QMainWindow 组件删除