Qt 项目主进程接收Alarm 后在GUI上显示,并且可以有选择性输出文件
项目主进程接收报警后,将alarm msg 发送给代理, 并将其分发:
else if (msg.name == "MesLCUalarmRep") {
QString errorText;
QXmlTools tool;
int status;
int code;
int severity;
if ( tool.setData(msg.body, errorText) ) {
QDomElement root = tool.getDocument()->documentElement();
QString tag = root.tagName();
if ( tag == "Body" ) {
QDomNode child = root.firstChild();
while ( !child.isNull() ) {
tag = child.toElement().tagName();
if ( tag == "STAT" ) {
QString text_status = child.toElement().text();
if( text_status == "MesInfo" ){
//return;
}
status = ( text_status.toUpper() == "MESON" ) ? : ;
}
else if ( tag == "ErrorType" ) {
severity = ( child.toElement().text().toUpper() == "HEAVY" ) ? : ;
}
else if ( tag == "ErrorMessage" ) {
errorText = child.toElement().text();
}
else if ( tag == "ErrorCode" ) {
code = atoi( child.toElement().text().toLatin1().data() );
}
child = child.nextSibling();
}
if(code == COMMONDEFECTALARMCODE || code == GLASSBROKENCALLCODE)
{
debug("enter common defect judge insertAlarm [%d] waitAlarmList.size:[%d]",code, waitAlarmList.size());
switchAlarmCode(code);
}
sendAlarmDetail2GUI(errorText);
/**
*@projectName BoeB9Project
*@author Hasan
**/
void BoeB9QtmCellInlineMain::sendAlarmDetail2GUI(QString errorMsg)
{
mgrGlassMapCellInlineBoeB9Lst& GlassMapLst = mgrGlassMapCellInlineBoeB9Lst::GetInstance(); QString diffMsg = "4H"; QString errorTIme = QDateTime::currentDateTime().toString("yyyyMMdd-hh:mm:ss");
QString errorGls = GlassMapLst.GetJobGlassFromkey("GlsID"); if(errorGls == "") errorGls = "9AAB85001702a1";
else if(errorGls.size()< && errorGls != "") errorGls.append(" "); errorMsg = diffMsg + errorTIme + errorGls + errorMsg; sendMesGUIOperatorCallMsg(errorMsg);
}
代理将其分发后GUI接收此alarm, 并且将其在独立窗口显示:
void BoeB9InlineMainForm::showOperatorCallMsg(QString msg)
{
if(msg.startsWith("4H"))
showAlarmList(msg);
else
{
opCallDialog->insertMassge(msg);
opCallDialog->show();
}
}
void BoeB9InlineMainForm::showAlarmList(QString alarmMsg)
{
alarmListForm->addAlarmItem2List(alarmMsg.mid(, alarmMsg.size()-));
alarmListForm->show();
}
独立窗口代码如此,并且点击窗口上的confirm按钮,可以将其输出文件保存:
#include "alarmlistform.h"
#include "ui_alarmlistform.h"
#include <QMessageBox> AlarmListForm::AlarmListForm(QWidget *parent, Qt::WindowFlags) :
QWidget(parent),
ui(new Ui::AlarmListForm),
currentRow(-)
{
ui->setupUi(this);
setWindowTitle("Alarm List"); QString currentDay = QDateTime::currentDateTime().toString("yyyy-MM-dd");
QString filePath = SMCU_WORK_PATH "/";
filePath += currentDay;
filePath += "-alarmList.dat";
file = new QFile(filePath); } AlarmListForm::~AlarmListForm()
{
delete ui;
} void AlarmListForm::addAlarmItem2List(QString alarmMsg)
{
QListWidgetItem *item = new QListWidgetItem;
item->setText(alarmMsg);
ui->listWidget->addItem(item);
} void AlarmListForm::on_pushButton_clicked()
{
if(currentRow < )
return; showDetailAlarm(currentRow); currentRow = -;
} void AlarmListForm::on_listWidget_clicked(const QModelIndex &index)
{
currentRow = ui->listWidget->currentRow();
} void AlarmListForm::on_pushButton_2_clicked()
{
int count = ui->listWidget->count();
for(int index = count; index >= ; index --)
{
QListWidgetItem *item = ui->listWidget->takeItem(index);
delete item;
}
this->close();
} void AlarmListForm::on_listWidget_doubleClicked(const QModelIndex &index)
{
showDetailAlarm(ui->listWidget->currentRow());
} void AlarmListForm::showDetailAlarm(int row)
{
QListWidgetItem *item = ui->listWidget->item(row);
QString alarmDetail = item->text();
int ans = QMessageBox::question(this,
tr("Alarm Detail"),
tr(alarmDetail.toLatin1().data()),
QMessageBox::Save | QMessageBox::Cancel);
if(ans == QMessageBox::Save)
{
saveAlarm2File(alarmDetail);
delete item;
} } void AlarmListForm::saveAlarm2File(QString alarmMsg)
{
if(!file->isOpen())
{
if(file->open(QIODevice::Append | QIODevice::Text))
{
}
else
{
return;
} }
if(alarmMsg.size() <= )
{
QTextStream buff(file);
buff<<"<Time>" << "alarmMsg.left(10)" << "</Time>";
return;
}
QTextStream buff(file);
buff<<"<Time>" << alarmMsg.mid(, ) << "</Time>";
buff<<"<GlsID>" << alarmMsg.mid(, ) << "</GlsID>";
buff<<"<AlarmMsg>" << alarmMsg.mid(, alarmMsg.size()-) << "</AlarmMsg>";
buff<<endl; buff.flush();
file->close();
}
Qt 项目主进程接收Alarm 后在GUI上显示,并且可以有选择性输出文件的更多相关文章
- 研究Electron主进程、渲染进程、webview之间的通讯
背景 由于某个Electron应用,需要主进程.渲染进程.webview之间能够互相通讯. 不过因为Electron仅提供了主进程与渲染进程的通讯,没有渲染进程之间或渲染进程与webview之间通讯的 ...
- Wndows 主进程(Rundll32)已停止工作
打开电脑,出现"windows 主进程(Rundll32)已停止工作",百度了一下,是文件损坏了. 下载一个新的文件,替换即可,若遇到权限问题,使用魔方工具中的设置 ...
- 360等杀掉了app的主进程后 ,如何自动开启 如何防止被kill
如何阻止360等进程查杀工具停止App后台进程安全软件优化内存时需要关闭没用的进程既然你同意使用360,,也允许了360的最高权限..那么他就有足够的权限来杀掉app后台进程. 一 如何保证app进程 ...
- Qt启动子进程,子进程关闭时通知主进程,实现主进程对子进程的管理
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.需求描述 Qt主进程启动 ...
- WPF工作笔记:本地化支持、主进程通知、两种最常用异步编程方式
1.本地化支持 (1)重写控件默认的依赖属性LanguageProperty FrameworkElement.LanguageProperty.OverrideMetadata( typeof(Fr ...
- Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析
转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编 ...
- 【学习笔记】启动Nginx、查看nginx进程、查看nginx服务主进程的方式、Nginx服务可接受的信号、nginx帮助命令、Nginx平滑重启、Nginx服务器的升级
1.启动nginx的方式: cd /usr/local/nginx ls ./nginx -c nginx.conf 2.查看nginx的进程方式: [root@localhost nginx] ...
- scrapy 源码解析 (二):启动流程源码分析(二) CrawlerProcess主进程
CrawlerProcess主进程 它控制了twisted的reactor,也就是整个事件循环.它负责配置reactor并启动事件循环,最后在所有爬取结束后停止reactor.另外还控制了一些信号操作 ...
- 优化 Workerman 检查主进程是否存活的逻辑
主要新增了判断进程是否为 Workerman 进程的逻辑,从而优化了确定主进程是否存活的准确性 发现问题 年前逛 GitHub 的时候,发现 Workerman 有一个 2017 年打开的 Issue ...
随机推荐
- JavaScript 访问对象属性和方法及区别
这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...
- Python基础-简介二
一.变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据类型,这些 ...
- Linux基础之命令练习Day4-fdisk,mkfs,mlabel,mount,umount,mkswap,swapon,dd,top,free,ps,kill,rpm,yum,make
一. 硬盘分区.格式化及文件系统的管理 1. 在Linux系统中,一切皆文件.每个设备都被当作一个文件来对待. 常见的存储设备在Linux系统中的文件名如下表所示: 2. 对硬盘进行分区有以下优点: ...
- 安装配置postgreSQL+pgcli+pgadmin3
记录了postgreSQL数据库的完整的安装配置过程,以及postgreSQL的pgcli命令行智能提醒扩展,pgadmin3图形化管理客户端的配置安装.此postgresql是bigsql版安装详情 ...
- 在Ubuntu14.10中部署Hadoop2.6.0单节点伪分布集群
1. 环境信息如下: ubuntu:14.10 jdk:openjdk-1.7.0 hadoop:2.6.0 2. 下载hadoop2.6.0, http://apache.fayea.com/had ...
- 华为手机在开发Android调试时logcat不显示输出信息的解决办法
手机连接电脑RUN AS logcat 提示:Unable to open log device '/dev/log/main': No such file or directory 信息 本人华为C ...
- 错误: 安装必备组件失败: 安装必备组件失败: SqlInstanceRtc 有关详细信息
错误: 安装必备组件失败: 安装必备组件失败: SqlInstanceRtc 有关详细信息 查看错误得知是安装sqlexpr_x64.exe的时候出现了错误 解决: 通过打开skype镜像,找到sql ...
- dll的制作
https://blog.csdn.net/guanchanghui/article/details/1621031
- MyEcplise使用---使用 MyEclipse 反转引擎生成数据库
使用 MyEclipse 反转引擎,生成数据库 步骤: 1. 新建 Database 连接 2. 新建web项目 temp 添加myeclipse hibernate 能力 3. Hibernate ...
- TortoiseGit基本操作
使用之前需要下载git for windows,tortoisegit . 1.TortoiseGit使用与操作 1.1克隆 打开一个要存放项目的文件夹下,右键Git Clone...进行克隆 弹出克 ...