C++中QT项目进程接收(代码分享)

Qt 项目主进程接收Alarm 后在GUI上显示,并且可以有选择性输出文件

C++中QT项目进程接收(代码分享)

QT

项目主进程接收报警后,将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++过程中所遇到的问题发给我们。我们每天都会按时回复大家的每一个问题,希望久伴可以伴随你从入门到专家.


分享到:


相關文章: