Qt QTextEdit调用append数据重复的问题

24 篇文章 0 订阅

使用QTextEdit写了个串口工具, 当串口有数据时通过一个signal传给slot,在 slot中调用QTextEdit的append(text)来增量显示串口数据,当串口关闭时调用clear()来清空显示。
结果发现append调用后显示的数据会有重复。

分析

分析代码,在open串口后,会调用connect,把串口数据传到onSerialData函数中,一个signal会多次调用slots,导致数据重复。

connect(m_serialPort, SIGNAL(readyReadSig(QString)), this, SLOT(onSerialData(QString)));

解决

connect最后添加参数Qt::UniqueConnection确保signal一一对应slots,不会重复调用。

	connect(m_serialPort, SIGNAL(readyReadSig(QString)), this, SLOT(onSerialData(QString)), Qt::UniqueConnection);

作者:帅得不敢出门 csdn原创

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在QT界面中调用OpenFoam的命令行工具,可以使用QT的QProcess类。该类允许在QT应用程序中启动外部进程,并与其交互。 以下是一个简单的示例代码,演示如何使用QProcess在QT界面中调用OpenFoam的命令行工具并将输出显示在QT界面中: ```cpp #include <QProcess> #include <QTextEdit> // 在QT界面中调用OpenFoam命令行工具,并将输出显示在QT界面的文本编辑器中 void runOpenFoamCommand(const QString& command, QTextEdit* outputWidget) { // 创建一个QProcess对象,并设置命令行参数 QProcess* process = new QProcess(); process->setProgram("bash"); QStringList arguments; arguments << "-c" << command; process->setArguments(arguments); // 设置QProcess的一些参数,例如启动目录、环境变量等 process->setWorkingDirectory("/path/to/OpenFoam/"); QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); environment.insert("FOAM_INST_DIR", "/path/to/OpenFoam/"); process->setProcessEnvironment(environment); // 将QProcess的标准输出和错误输出连接到槽函数,以便在QT界面中显示输出 QObject::connect(process, &QProcess::readyReadStandardOutput, [=]() { outputWidget->append(process->readAllStandardOutput()); }); QObject::connect(process, &QProcess::readyReadStandardError, [=]() { outputWidget->append(process->readAllStandardError()); }); // 启动QProcess,并等待它完成 process->start(); process->waitForFinished(); // 释放QProcess对象 delete process; } ``` 在上面的代码中,runOpenFoamCommand函数接受两个参数:要执行的OpenFoam命令和一个QTextEdit对象,用于显示命令的输出。在函数中,我们首先创建一个QProcess对象,并设置其命令行参数。然后,我们设置QProcess的一些其他参数,例如启动目录和环境变量。接下来,我们将QProcess的标准输出和错误输出连接到lambda函数中,该函数将输出添加到QT界面的文本编辑器中。最后,我们启动QProcess,并等待它完成,然后释放QProcess对象。 要调用此函数,只需在QT界面中调用它,并传递要执行的OpenFoam命令和要显示输出的QTextEdit对象。例如: ```cpp QTextEdit* outputWidget = new QTextEdit(); runOpenFoamCommand("foamListTimes -case /path/to/OpenFoam/case", outputWidget); ``` 在上面的代码中,我们创建一个QTextEdit对象,用于显示OpenFoam命令的输出。然后,我们调用runOpenFoamCommand函数,并传递要执行的命令和输出窗口小部件。函数将在QT界面中启动OpenFoam命令,并将输出显示在QTextEdit对象中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值