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" ) ? 1 : 0;
}
else if ( tag == "ErrorType" ) {
severity = ( child.toElement().text().toUpper() == "HEAVY" ) ? 1 : 0;
}
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()<14 && 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(2, alarmMsg.size()-1));
alarmListForm->show();
}
独立窗口代码如此,并且点击窗口上的confirm按钮,可以将其输出文件保存:
复制代码
#include "alarmlistform.h"
#include "ui_alarmlistform.h"
#include
AlarmListForm::AlarmListForm(QWidget *parent, Qt::WindowFlags) :
QWidget(parent),
ui(new Ui::AlarmListForm),
currentRow(-1)
{
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 < 0)
return;
showDetailAlarm(currentRow);
currentRow = -1;
}
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 >= 0; 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() <= 10)
{
QTextStream buff(file);
buff<" << "alarmMsg.left(10)" << "";
return;
}
QTextStream buff(file);
buff<" << alarmMsg.mid(0, 17) << "";
buff<" << alarmMsg.mid(17, 14) << "";
buff<" << alarmMsg.mid(31, alarmMsg.size()-1) << "";
buff< buff.flush(); file->close(); } 最后你觉得我们的文章对你有帮助,评论区有学习的地址。你可以在上面询问、回答问题。最重要的一部分就是它是一个互动地方,而不仅仅是一个工具,所以请加入我们!此外,我们可以从中学到哪些部分比较重要、哪些部分没有意义等。欢迎关注我,并在评论下方的学习群,学习编码:久伴。可以随时在上面向我们提问,把你在学习C++过程中所遇到的问题发给我们。我们每天都会按时回复大家的每一个问题,希望久伴可以伴随你从入门到专家.
閱讀更多 前端勤學者一勞永逸 的文章