Qt:使用QUiLoader动态加载.ui

  1. 通常我们创建一个.ui文件,通过Qt Designer用拖拽的方式布置界面时,会需要用到uic工具吧.ui文件转化成相应的c++代码。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    而动态加载.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");
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是可以运行的代码: ```python import PySide2.QtWidgets from PySide2.QtUiTools import QUiLoader from PySide2.QtWidgets import QMessageBox from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import hashes class Caesar: def __init__(self): # 从文件中加载UI界面 self.ui = QUiLoader().load('code.ui') # 生成RSA密钥对 self.private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048 ) self.public_key = self.private_key.public_key() self.ui.pushButton_3.clicked.connect(self.encrypt2) def encrypt2(self): # 获取用户输入的文本 plaintext = self.ui.textEdit_9.toPlainText().encode() # 使用公钥进行加密 ciphertext = self.public_key.encrypt( plaintext, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) self.ui.textEdit_10.setPlainText(f"加密结果:{ciphertext.hex()}") if __name__ == '__main__': # 管理图形用户界面应用程序的控制流 app = PySide2.QtWidgets.QApplication([]) caesar = Caesar() # 显示ui界面 caesar.ui.show() app.exec_() ``` 这个代码中,我们做了以下修改: 1. 导入了所需的库:`cryptography.hazmat.primitives.asymmetric`、`cryptography.hazmat.primitives`,这些库用于实现加密算法,包括 RSA。 2. 在 `__init__` 函数中生成了一个 RSA 密钥对,并将公钥保存到了 `self.public_key` 变量中。这个变量可以在 `encrypt2` 函数中使用。 3. 在 `encrypt2` 函数中,我们将用户输入的明文先转换为字节串,然后使用公钥进行加密,并将密文的十六进制表示输出到文本框中。请注意,我们使用了 `padding.OAEP` 进行填充,这是 RSA 加密中推荐的填充方式之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值