Adds q2 repos to migrate
This commit is contained in:
1 parent
ad1f62c4ee
commit
17f1c61c9e
991 files changed
+178451
No files matched your search
@@ -0,0 +1,25 @@
|
||||
#
|
||||
# $Id$
|
||||
# $HeadURL$
|
||||
# $Author$
|
||||
#
|
||||
|
||||
SET(lta_SRCS
|
||||
main.cpp
|
||||
mainwindow.cpp
|
||||
)
|
||||
|
||||
SET(lta_HDRS
|
||||
mainwindow.h
|
||||
)
|
||||
|
||||
SET(lta_UICS
|
||||
mainwindow.ui
|
||||
)
|
||||
|
||||
NGL_WRAP_UI(lta_SRCS ${lta_UICS})
|
||||
NGL_ADD_EXECUTABLE(AAR SV NO_TRANSLATION LastTestAuswertung ${lta_SRCS} ${lta_HDRS} ${lta_UICS})
|
||||
NGL_TARGET_LINK_LIBRARIES(LastTestAuswertung
|
||||
Qt5::Core
|
||||
Qt5::Widgets
|
||||
)
|
||||
@@ -0,0 +1,16 @@
|
||||
#-------------------------------------------------
|
||||
#
|
||||
# Project created by QtCreator 2011-05-13T08:20:33
|
||||
#
|
||||
#-------------------------------------------------
|
||||
|
||||
TARGET = LastTestAuswertung
|
||||
TEMPLATE = app
|
||||
|
||||
|
||||
SOURCES += main.cpp\
|
||||
mainwindow.cpp
|
||||
|
||||
HEADERS += mainwindow.h
|
||||
|
||||
FORMS += mainwindow.ui
|
||||
@@ -0,0 +1,10 @@
|
||||
#include <QApplication>
|
||||
#include "mainwindow.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
MainWindow w;
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
||||
@@ -0,0 +1,428 @@
|
||||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include <QFileDialog>
|
||||
#include <QFile>
|
||||
#include <cmath>
|
||||
#include <QIntValidator>
|
||||
#include <QList>
|
||||
#include <QSet>
|
||||
#include <QTimer>
|
||||
|
||||
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent) :
|
||||
QMainWindow(parent),
|
||||
ui(new Ui::MainWindow)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
init();
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
m_files.clear();
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::changeEvent(QEvent *e)
|
||||
{
|
||||
QMainWindow::changeEvent(e);
|
||||
switch (e->type())
|
||||
{
|
||||
case QEvent::LanguageChange:
|
||||
ui->retranslateUi(this);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::init()
|
||||
{
|
||||
|
||||
connect(ui->pushButtonOrdnerFinden, &QPushButton::clicked, this, &MainWindow::slot_findFolder);
|
||||
connect(ui->pushButtonAnalysieren, &QPushButton::clicked, this, &MainWindow::slot_analysieren);
|
||||
|
||||
ui->progressBar->setValue(0);
|
||||
ui->labelResult->setText(QString());
|
||||
QIntValidator intVal;
|
||||
intVal.setBottom(0);
|
||||
intVal.setTop(100000);
|
||||
ui->lineEditISSI->setValidator(&intVal);
|
||||
}
|
||||
|
||||
void MainWindow::slot_findFolder()
|
||||
{
|
||||
|
||||
|
||||
|
||||
QString name = QFileDialog::getExistingDirectory(this, tr("Choose folder"), QDir::homePath(), QFileDialog::DontResolveSymlinks);
|
||||
ui->lineEditOrdner->setText(name);
|
||||
ui->labelResult->setText(QString());
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::slot_analysieren()
|
||||
{
|
||||
ui->labelResult->setText(QString());
|
||||
QString ISSI = ui->lineEditISSI->text();
|
||||
if (ISSI.isEmpty())
|
||||
ISSI = QLatin1String("1");
|
||||
m_logfileList.clear();
|
||||
|
||||
|
||||
QDir folder(ui->lineEditOrdner->text());
|
||||
m_files = folder.entryList();
|
||||
folder.~QDir();
|
||||
ui->progressBar->setValue(1);
|
||||
const QString paytext = ISSI + QLatin1String("-payload");
|
||||
const QString issitext = ISSI + QLatin1String("-1");
|
||||
for (int i = 0; i < m_files.count(); i++)
|
||||
{
|
||||
|
||||
QString name = m_files[i];
|
||||
if (name.contains(paytext))
|
||||
{
|
||||
m_files.removeAt(i);
|
||||
i--;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!name.contains(QLatin1String(".dat")))
|
||||
{
|
||||
m_files.removeAt(i);
|
||||
i--;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!name.contains(issitext))
|
||||
{
|
||||
m_files.removeAt(i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ui->progressBar->setValue(10);
|
||||
if (m_files.count() == 0)
|
||||
ui->labelResult->setText(tr("no logfiles found"));
|
||||
else
|
||||
{
|
||||
openLogfile(ui->lineEditOrdner->text(), m_files.count());
|
||||
ui->progressBar->setValue(12);
|
||||
ui->progressBar->repaint();
|
||||
readFiles();
|
||||
ui->progressBar->setValue(90);
|
||||
ui->progressBar->repaint();
|
||||
QString ausgabetext = QLatin1String("\tANALYSIS COMPLETED - ") + QString::number(auswerten()) + QLatin1String(" missing messages");
|
||||
ui->labelResult->setText(ausgabetext);
|
||||
}
|
||||
ui->progressBar->setValue(100);
|
||||
ui->progressBar->repaint();
|
||||
}
|
||||
|
||||
void MainWindow::readFiles()
|
||||
{
|
||||
for (int j = 0; j < m_files.count(); j++)
|
||||
{
|
||||
QString filename = ui->lineEditOrdner->text();
|
||||
filename += QLatin1Char('/');
|
||||
filename += m_files[j];
|
||||
QFile file(filename);
|
||||
if (file.open(QIODevice::ReadOnly))
|
||||
{
|
||||
|
||||
QByteArray ar = file.read(150);
|
||||
file.close();
|
||||
if (ar.count() > 36)
|
||||
{
|
||||
QString issi = getISSI(ar);
|
||||
QByteArray bytes = ar;
|
||||
|
||||
|
||||
bytes.remove(0, 34);
|
||||
bytes.remove(2, 150);
|
||||
uint nr = bytes[0] & 255;
|
||||
nr *= 256;
|
||||
nr += bytes[1] & 255;
|
||||
|
||||
|
||||
bytes = ar;
|
||||
bytes.remove(0, 30);
|
||||
bytes.remove(4, 150);
|
||||
|
||||
const QByteArray test = bytes.toHex();
|
||||
qint64 zeit = test.toLongLong(nullptr, 16);
|
||||
|
||||
const QDateTime timeStart(QDateTime::fromMSecsSinceEpoch(zeit * 1000));
|
||||
|
||||
writeToLogfile(issi, timeStart, getTimestamp(m_files[j]), m_files[j], nr);
|
||||
writeLogZeiten(timeStart, getTimestamp(m_files[j]), issi);
|
||||
|
||||
}
|
||||
}
|
||||
file.close();
|
||||
double val = 70;
|
||||
val /= m_files.count();
|
||||
val *= (j + 1);
|
||||
val += 20;
|
||||
ui->progressBar->setValue(int(val));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::openLogfile(const QString &folder, int count)
|
||||
{
|
||||
m_logfile = folder;
|
||||
m_logZeiten = folder;
|
||||
m_logfile += QLatin1String("/logfile_analysis.txt");
|
||||
QFile file(m_logfile);
|
||||
if (file.open(QIODevice::WriteOnly | QIODevice::Text))
|
||||
{
|
||||
const QString msg = QStringLiteral("There are %1 logfiles evaluated.\nISSI SENDING TIME RECIEVING TIME FILENAME NO \n").arg(count);
|
||||
file.write(msg.toUtf8());
|
||||
file.close();
|
||||
}
|
||||
m_logZeiten += QLatin1String("/transmission_times.csv");
|
||||
file.setFileName(m_logZeiten);
|
||||
if (file.open(QIODevice::WriteOnly))
|
||||
{
|
||||
file.write("ISSI;Sending Time ; Receiving Time\n");
|
||||
file.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::writeToLogfile(const QString &issi,
|
||||
const QDateTime ×tamp,
|
||||
const QString &filename,
|
||||
uint lfdNr,
|
||||
const QString &bytes)
|
||||
{
|
||||
QString text = issi;
|
||||
text += QLatin1String(": ");
|
||||
text += timestamp.toString(QLatin1String("dd.MM.yyyy hh:mm:ss"));
|
||||
text += QLatin1String(" - ");
|
||||
text += filename;
|
||||
text += QLatin1String(" -> ");
|
||||
text += bytes;
|
||||
text += QLatin1String(" --> ");
|
||||
text += QString::number(lfdNr, 10);
|
||||
text += QLatin1Char('\n');
|
||||
QFile file(m_logfile);
|
||||
if (file.open(QIODevice::Append | QIODevice::Text))
|
||||
{
|
||||
file.write(text.toLatin1());
|
||||
file.close();
|
||||
}
|
||||
LogfileInfo info;
|
||||
info.timestamp = timestamp;
|
||||
info.issi = issi;
|
||||
info.lfdNr = lfdNr;
|
||||
m_logfileList.append(info);
|
||||
}
|
||||
|
||||
void MainWindow::writeToLogfile(const QString &issi,
|
||||
const QDateTime &sendeZeit,
|
||||
const QDateTime ×tamp,
|
||||
const QString &filename,
|
||||
uint lfdNr)
|
||||
{
|
||||
QString text = issi;
|
||||
text += QLatin1String(": ");
|
||||
text += sendeZeit.toString(QLatin1String("hh:mm:ss"));
|
||||
text += QLatin1String(" --> ");
|
||||
text += timestamp.toString(QLatin1String("dd.MM.yyyy hh:mm:ss"));
|
||||
text += QLatin1String(" - ");
|
||||
text += filename;
|
||||
text += QLatin1String(" --> ");
|
||||
text += QString::number(lfdNr, 10);
|
||||
text += QLatin1Char('\n');
|
||||
QFile file(m_logfile);
|
||||
if (file.open(QIODevice::Append | QIODevice::Text))
|
||||
{
|
||||
file.write(text.toLatin1());
|
||||
file.close();
|
||||
}
|
||||
LogfileInfo info;
|
||||
info.timestamp = timestamp;
|
||||
info.issi = issi;
|
||||
info.lfdNr = lfdNr;
|
||||
m_logfileList.append(info);
|
||||
}
|
||||
|
||||
QDateTime MainWindow::getTimestamp(const QString &filename) const
|
||||
{
|
||||
const auto list1 = filename.splitRef(QLatin1Char('-'));
|
||||
if (list1.size() < 2)
|
||||
return {};
|
||||
|
||||
const QStringRef &fn = list1.at(1);
|
||||
const auto list2 = fn.split(QLatin1Char('.'));
|
||||
auto str = list2.at(0).toString();
|
||||
str.remove(10, 10);
|
||||
|
||||
return QDateTime::fromMSecsSinceEpoch(str.toLongLong() * 1000);
|
||||
}
|
||||
|
||||
QString MainWindow::getISSI(QByteArray ar)
|
||||
{
|
||||
|
||||
ar.remove(0, 5);
|
||||
ar.remove(4, 200);
|
||||
QByteArray issi = ar.toHex();
|
||||
|
||||
if (ar.count() == 4)
|
||||
{
|
||||
if (ar[2] == '\0' && ar[3] == '\0')
|
||||
{
|
||||
ar.remove(2, 2);
|
||||
issi = ar.toHex();
|
||||
int hex[4];
|
||||
for (int i = 3; i >= 0; i--)
|
||||
{
|
||||
char c = issi.at(i);
|
||||
if (c >= '0' && c <= '9')
|
||||
hex[i] = c - '0';
|
||||
else if (c >= 'a' && c <= 'f')
|
||||
hex[i] = c - 'a' + 10;
|
||||
|
||||
}
|
||||
int sum = 0;
|
||||
sum += hex[1];
|
||||
sum += hex[0] * 16;
|
||||
sum += hex[3] * 256;
|
||||
sum += hex[2] * 4096;
|
||||
issi = QByteArray::number(sum);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return QString::fromLatin1(issi);
|
||||
}
|
||||
|
||||
int MainWindow::auswerten()
|
||||
{
|
||||
|
||||
|
||||
QFile f(m_logfile);
|
||||
if (!f.open(QIODevice::Append | QIODevice::Text))
|
||||
return -1;
|
||||
f.write("***************************RESULT************************************\n");
|
||||
QSet<QString> issis;
|
||||
issis.reserve(100);
|
||||
for (int i = 0; i < m_logfileList.count(); i++)
|
||||
{
|
||||
|
||||
issis += m_logfileList.at(i).issi;
|
||||
}
|
||||
ui->progressBar->setValue(94);
|
||||
ui->progressBar->repaint();
|
||||
int fehlcount = 0;
|
||||
QVector<uint> numList;
|
||||
int i = 0;
|
||||
for (const QString &issi : qAsConst(issis))
|
||||
{
|
||||
|
||||
numList.clear();
|
||||
for (int j = 0; j < m_logfileList.count(); j++)
|
||||
{
|
||||
if (issi == m_logfileList.at(j).issi)
|
||||
numList.append(m_logfileList.at(j).lfdNr);
|
||||
}
|
||||
QByteArray text = issi.toLatin1();
|
||||
text += ":\t";
|
||||
text += QByteArray::number(numList.count());
|
||||
text += " messages transmitted\n";
|
||||
text += "\t";
|
||||
f.write(text);
|
||||
|
||||
fehlcount += fehlendeNumsEintragen(numList, f);
|
||||
|
||||
|
||||
double val = 5;
|
||||
val /= issis.count();
|
||||
val *= (i + 1);
|
||||
val += 94;
|
||||
ui->progressBar->setValue(qRound(val));
|
||||
ui->progressBar->repaint();
|
||||
|
||||
++i;
|
||||
}
|
||||
return fehlcount;
|
||||
}
|
||||
|
||||
int MainWindow::fehlendeNumsEintragen(const QVector<uint> &numList, QFile &f)
|
||||
{
|
||||
|
||||
QVector<uint> fehlendeNums = getFehlendeNums(numList);
|
||||
QByteArray text = QByteArray::number(fehlendeNums.count());
|
||||
text += " lost messages\n";
|
||||
text += "\t\t following messages are missing (";
|
||||
for (int j = 0; j < fehlendeNums.count(); j++)
|
||||
{
|
||||
text += QByteArray::number(fehlendeNums.at(j));
|
||||
text += ", ";
|
||||
}
|
||||
|
||||
text += ")\n";
|
||||
|
||||
f.write(text);
|
||||
|
||||
return fehlendeNums.count();
|
||||
}
|
||||
|
||||
QVector<uint> MainWindow::getFehlendeNums(const QVector<uint> &numsDurchgang)
|
||||
{
|
||||
|
||||
uint count = numsDurchgang.count();
|
||||
uint maxnum = 0;
|
||||
uint minnum = 999999;
|
||||
for (uint k = 0; k < count; k++)
|
||||
{
|
||||
|
||||
if (numsDurchgang.at(k) > maxnum)
|
||||
maxnum = numsDurchgang.at(k);
|
||||
if (numsDurchgang.at(k) < minnum)
|
||||
minnum = numsDurchgang.at(k);
|
||||
}
|
||||
|
||||
QVector<uint> fehlendeNum;
|
||||
for (uint z = minnum; z <= maxnum; z++)
|
||||
{
|
||||
|
||||
bool vorhanden = false;
|
||||
for (uint j = 0; j < count; j++)
|
||||
{
|
||||
if (numsDurchgang.at(j) == z)
|
||||
{
|
||||
vorhanden = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!vorhanden)
|
||||
fehlendeNum.append(z);
|
||||
}
|
||||
return fehlendeNum;
|
||||
}
|
||||
|
||||
void MainWindow::writeLogZeiten(const QDateTime &beginn, const QDateTime &end, const QString &issi)
|
||||
{
|
||||
QString msg = issi;
|
||||
msg += QLatin1Char(';');
|
||||
msg += beginn.toString(QLatin1String("hh:mm:ss"));
|
||||
msg += QLatin1Char(';');
|
||||
msg += end.toString(QLatin1String("hh:mm:ss"));
|
||||
msg += QLatin1Char('\n');
|
||||
QFile file(m_logZeiten);
|
||||
file.open(QIODevice::Append | QIODevice::Text);
|
||||
file.write(msg.toUtf8());
|
||||
file.close();
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
#ifndef MAINWINDOW_H
|
||||
#define MAINWINDOW_H
|
||||
|
||||
#include <QMainWindow>
|
||||
#include <QDateTime>
|
||||
#include <QFile>
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class MainWindow;
|
||||
}
|
||||
|
||||
struct LogfileInfo
|
||||
{
|
||||
QString issi;
|
||||
QDateTime timestamp;
|
||||
uint lfdNr;
|
||||
};
|
||||
struct ZeitNum
|
||||
{
|
||||
uint zeit;
|
||||
int num;
|
||||
};
|
||||
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
protected:
|
||||
void changeEvent(QEvent *e);
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
void init();
|
||||
void readFiles();
|
||||
QStringList m_files;
|
||||
QDateTime getTimestamp(const QString &filename) const;
|
||||
QString m_logfile;
|
||||
QString m_logZeiten;
|
||||
void openLogfile(const QString &folder, int count);
|
||||
void writeToLogfile(const QString &issi,
|
||||
const QDateTime ×tamp,
|
||||
const QString &filename,
|
||||
uint lfdNr,
|
||||
const QString &bytes);
|
||||
void writeToLogfile(const QString &issi,
|
||||
const QDateTime &sendeZeit,
|
||||
const QDateTime ×tamp,
|
||||
const QString &filename,
|
||||
uint lfdNr);
|
||||
QString getISSI(QByteArray ar);
|
||||
int auswerten();
|
||||
QVector<uint> getFehlendeNums(const QVector<uint> &numsDurchgang);
|
||||
int fehlendeNumsEintragen(const QVector<uint> &numList, QFile &file);
|
||||
void writeLogZeiten(const QDateTime &beginn, const QDateTime &end, const QString &issi);
|
||||
|
||||
QVector<LogfileInfo> m_logfileList;
|
||||
|
||||
private slots:
|
||||
void slot_findFolder();
|
||||
void slot_analysieren();
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>521</width>
|
||||
<height>234</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Logfiles analysieren</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralWidget">
|
||||
<widget class="QWidget" name="gridLayoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>80</y>
|
||||
<width>501</width>
|
||||
<height>101</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QPushButton" name="pushButtonAnalysieren">
|
||||
<property name="text">
|
||||
<string>analyse logfiles</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QProgressBar" name="progressBar">
|
||||
<property name="value">
|
||||
<number>24</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="labelResult">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="verticalLayoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>9</x>
|
||||
<y>0</y>
|
||||
<width>501</width>
|
||||
<height>65</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEditOrdner"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButtonOrdnerFinden">
|
||||
<property name="text">
|
||||
<string>choose folder</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEditISSI"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ISSI by the central<br />(if no ISSI is entered, ISSI 1 will be used)</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menuBar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>521</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QToolBar" name="mainToolBar">
|
||||
<attribute name="toolBarArea">
|
||||
<enum>TopToolBarArea</enum>
|
||||
</attribute>
|
||||
<attribute name="toolBarBreak">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusBar"/>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
Reference in new issue
Block a user