Qt:使用QUiLoader动态加载.ui

  1. 通常我们创建一个.ui文件,通过Qt Designer用拖拽的方式布置界面时,会需要用到uic工具吧.ui文件转化成相应的c++代码。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    Qt:使用QUiLoader动态加载.ui_第1张图片
    而动态加载.ui文件是在程序运行过程中用 QUiLoader动态加载.ui文件,达到相同目的,而无需通过上述的uic进行转换。

其适用于:
(1)UI文件是程序运行中途创建生成的,在同程序的其他地方调用,没法进行uic。
(2)前端设计和功能实现相分离,前端设计人员和功能实现人员只要事前沟通好相关组件的名称等,就可以进行独立开发,能提高效率。

  1. 需要用到头文件< QUiLoader >,注意配置好相应的依赖目录。

  2. 实现

	QUiLoader loader;
	QString fileName = "./func.ui"; //.ui文件的路径
	QFile file(fileName);
	if (!file.open(QFile::ReadOnly))//打开文件
		return;

	loader.addPluginPath(QApplication::applicationDirPath());//将给定路径添加到加载程序在查找插件时将搜索的路径列表中。
	m_pCustomWidget = loader.load(&file, this);
	file.close();
	if (m_pCustomWidget)
	{
		ui.verticalLayout->addWidget(m_pCustomWidget);//在主ui中动态加载.ui的界面
	}

使用.ui中的控件对象,需要用findChild进行查找。

m_pbtnError = m_pCustomWidget->findChild<HomagToolButton *>("m_btnError");
	m_pbtnMenu = m_pCustomWidget->findChild<QPushButton *>("m_btnMenu");
	m_pstackedWidget = m_pCustomWidget->findChild<QStackedWidget *>("stackedWidget");

你可能感兴趣的:(Qt)