如何在qt中使用QuiLoader加载ui文件的类文件
How to load class file of the ui file loaded using QuiLoader in qt
我是QT的新手,在使用QUiLoader类时遇到了麻烦。我想要实现的是加载另一个ui文件上的按钮单击在同一窗口,这是工作良好。但是加载的新ui文件中有一个按钮,当点击时应该执行特定的代码(比如打印"hi"),这并没有发生。按钮出现了,但什么也没做。新加载的仪表板的类文件。UI文件未被包含。
下面是加载新ui文件的代码QUiLoader loader;
QFile file(":/dashboard.ui");
file.open(QFile::ReadOnly);
QWidget *myWidget = loader.load(&file, this);
qDebug() << loader.pluginPaths();
file.close();
ui->verticalLayout->addWidget(myWidget);
有一种方法,通过它我可以包括仪表板的类文件。UI使按钮再次完美地工作?
您需要连接信号,该代码(显然)不会自动完成。有两种方法可以做到。注意:未经测试的代码,可能有错误。
按槽位名自动连接
如果在父类中有正确名称的方法,可以使用QMetaObject::connectSlotsByName:
...
ui->verticalLayout->addWidget(myWidget); // first myWidget must have parent set
QMetaObject::connectSlotsByName(this); // connect matching signals from children
...
假设按钮名称为,例如"myLoadedButton",并且您想要clicked()
信号,那么使用上述代码,您必须在this
对象的类中具有on_myLoadedButton_clicked()
插槽。
警告:文档没有说明并且我没有检查源代码,所以如果多次调用这个可能会重复连接。所以要小心这个,如果它击中了你,那么你必须使用下面的方法:
手动连接
如果您有不同的插槽名称或想要连接到父节点以外的其他节点,您也可以使用QObject::findChild
:
...
QPushButton *button = myWidget->findChild<QPushButton *>("myLoadedButton");
if (button) {
QObject::connect(button, SIGNAL(clicked()), this, SLOT(loadedButtonPress()));
}
// else widget not found, print error?
相关文章:
- 如何处理使用.ui文件生成的.h文件
- 可以在JSON文件的帮助下在Qt中创建UI表单
- 在 ui 文件中隐藏 QTabWidget 中的单个选项卡窗格?
- 由于多个 *.ui 文件而导致的多个Ui_Dialog定义?
- 如何将 .ui 完全转换为 C++ 头文件和源文件
- 从多个文件访问静态全局 WinForm UI 对象
- 如何在Qt Designer UI文件中清除QMainWindow的几何标记
- 将一个 UI 文件添加到另一个 UI 文件中
- 如何使用.UI文件在QT Creator中使用CMAKE制作GUI QT项目
- QT Creator不会更新.UI文件和设计器
- 为什么使用Qt Creator调整.ui文件会导致编译期间对.h文件进行更改
- 在流体中更改 .fl 文件在使用 Visual Studio 运行时不会更改 UI
- 连接QT中的多个.UI文件
- 将 .ui 文件导入 Qt5 C++时出错"was not declared in this scope"
- QT在UI文件中恢复了我的更改
- 是否可以在Qt设计器中使用依赖项注入(对于.ui文件)
- QML应用程序编译一个 *form.ui.qml文件,但忽略了关联的.qml文件
- QUiLoader:使用自定义小部件加载 .ui 文件的要求
- 无法从外部cpp文件访问Qt UI
- 在一个程序中处理多个QT Designer UI文件的最佳方法是什么?