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++過程中所遇到的問題發給我們。我們每天都會按時回覆大家的每一個問題,希望久伴可以伴隨你從入門到專家.


分享到:


相關文章: