Qt6,使用 UI 界面完成命令执行自动化的设计

一、需要完成的功能

在子对话框(CmdChildQt)中,点击 “执行” 按钮,将多个命令行指令,依次输入到父对话框(CmdQt)的编辑框中并且执行,要求如下:

  1. 在前一个命令执行完成后,获取命令行返回结果信息,根据结果信息判断,进行下一步操作;
  2. 当前一个命令执行成功后,继续自动输入下一个命令行指令到父对话框编辑框中执行,就这样依次执行多个命令行命令,达到命令执行自动化的目的。

二、实现方法

  • 父对话框
class CmdQt : public QDialog
{
	Q_OBJECT

signals:
	void cmdFinished(QString qstr);
};


void CmdQt::slot_inputCommand()
{

}

void CmdQt::slot_SetCommandRetInfo(DATA_INFO info)
{
	emit cmdFinished(qstr);
}

void CmdQt::setSignalExecCmdLine()
{
	emit ui.leditInputCommand->returnPressed();
}
  • 子对话框
class CmdChildQt :
	public QDialog
{
	Q_OBJECT

private:
	QEventLoop loop;

	QString m_qstrRecvCmdRetInfo;

signals:
	void signal_sendQuit();

private slots:
	void slot_RecvCmdRetInfo(QString qstrInfo);
};

void CmdChildQt::slot_RecvCmdRetInfo(QString qstrInfo)
{
	m_qstrRecvCmdRetInfo = qstrInfo;

	emit signal_sendQuit();
}

void CmdChildQt::slot_exec()
{
	m_parent->setCmdLine(ui.editCmdSelect->text().trimmed());

	connect(m_parent, &CmdQt::cmdFinished, this, &CmdChildQt::slot_RecvCmdRetInfo);
	connect(this, &CmdChildQt::signal_sendQuit, &loop, &QEventLoop::quit);
	m_parent->setSignalExecCmdLine();
	loop.exec();

	if (m_qstrRecvCmdRetInfo.contains("same string...") == false)
	{

		return;
	}
	
	...

	m_parent->setCmdLine("command -param");

	m_parent->setSignalExecCmdLine();
	loop.exec();

	if (m_qstrRecvCmdRetInfo.contains("same string...") == false)
	{

		return;
	}

	...

	disconnect(m_parent, &CmdQt::cmdFinished, this, &CmdChildQt::slot_RecvCmdRetInfo);
	disconnect(this, &CmdChildQt::signal_sendQuit, &loop, &QEventLoop::quit);

	...
}

上述代码的主要逻辑:

  1. 链接信号和槽函数;
  2. 在子对话框中,获取命令行,并设置父对话框的编辑框为命令行指令,向父对话框编辑框发射 returnPressed 信号,槽函数 slot_inputCommand 被触发执行;
  3. 之后,slot_inputCommand 触发 slot_SetCommandRetInfo 执行;
  4. 在 slot_SetCommandRetInfo 中,发射 cmdFinished 信号,cmdFinished 信号触发 slot_RecvCmdRetInfo 执行;
  5. 在 slot_RecvCmdRetInfo 中,发射 signal_sendQuit 信号,signal_sendQuit 触发 QEventLoop::quit 执行;
  6. loop.exec() 返回,并执行之后的代码;
  7. 根据 m_qstrRecvCmdRetInfo 的值,进行下一步骤;如果,命令执行成功,继续执行下一个命令。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值