effectui 추가

형태소분석기 숫자 정렬 추가
batch run 시 결과값이 올바르게 나오지 않는 현상 디버깅

git-svn-id: svn://192.168.0.12/source@297 8346c931-da38-4b9b-9d4c-e48b93cbd075
This commit is contained in:
admin
2016-10-06 07:54:45 +00:00
parent c55fc7f2f0
commit 85c47edea3
25 changed files with 1974 additions and 37 deletions

31
EffectUI/EffectUI.pro Normal file
View File

@@ -0,0 +1,31 @@
#-------------------------------------------------
#
# Project created by QtCreator 2016-09-27T18:05:24
#
#-------------------------------------------------
QT += core gui network sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = EffectUI
TEMPLATE = app
CONFIG += c++11
SOURCES += main.cpp\
widget.cpp \
scompanylistwidget.cpp \
sutilfunction.cpp \
sutilclass.cpp \
srunninglistwidget.cpp \
stimer.cpp
HEADERS += widget.h \
scompanylistwidget.h \
sutilfunction.h \
sutilclass.h \
srunninglistwidget.h \
stimer.h
FORMS += widget.ui

1001
EffectUI/EffectUI.pro.user Normal file

File diff suppressed because it is too large Load Diff

11
EffectUI/main.cpp Normal file
View File

@@ -0,0 +1,11 @@
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}

View File

@@ -0,0 +1,312 @@
#include "scompanylistwidget.h"
#include "sutilfunction.h"
#include "sutilclass.h"
#include <QPushButton>
#include <QString>
#include <QVector>
#include <QCalendarWidget>
#include <QDateEdit>
#include <QTableWidget>
#include <QVBoxLayout>
#include <QSqlDatabase>
#include <QSettings>
#include <QMessageBox>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
namespace
{
QString strDatabaseName("companylist");
}
enum class SCompanyListWidget::E_TABLE_HEADER
{
COMPANY = 0,
START_DATE,
END_DATE,
EVENT_NUM,
STATUS,
MAX
};
SCompanyListWidget::~SCompanyListWidget()
{
if (m_pwParent == nullptr)
{
delete m_pbtnSearch;
delete m_pbtnRefresh;
delete m_pdeEnd;
delete m_pdeStart;
delete m_ptableWidget;
}
}
SCompanyListWidget::SCompanyListWidget(QWidget* parent):
m_pbtnSearch(new QPushButton(parent)), m_pbtnRefresh(new QPushButton(parent)),
m_ptableWidget(new QTableWidget(parent)), m_pdeStart(new QDateEdit(parent)),
m_pdeEnd(new QDateEdit(parent)), m_playout(new QVBoxLayout(parent)), m_pwParent(parent),
m_pslTableHeader(new QStringList)
{
*m_pslTableHeader << "Company" << "Start date" << "End date" << "Event Num" << "Status";
initButton();
initCalender();
initLayout();
initTableWidget();
initDatabase();
}
void SCompanyListWidget::initButton()
{
m_pbtnSearch->setText("Search");
m_pbtnRefresh->setText("Refresh");
connect(m_pbtnSearch, &QPushButton::released, this, &SCompanyListWidget::search);
connect(m_pbtnRefresh, &QPushButton::released, this, &SCompanyListWidget::refresh);
}
void SCompanyListWidget::initDatabase()
{
databaseSetting(strDatabaseName);
}
void SCompanyListWidget::initCalender()
{
// Qt manages calenderwidget variable
QCalendarWidget* calenderwidget = new QCalendarWidget();
m_pdeStart->setCalendarWidget(calenderwidget);
m_pdeEnd->setCalendarWidget(calenderwidget);
m_pdeStart->setCalendarPopup(true);
m_pdeEnd->setCalendarPopup(true);
}
void SCompanyListWidget::initLayout()
{
QHBoxLayout *pblbutton = new QHBoxLayout;
pblbutton->addWidget(m_pdeStart);
pblbutton->addWidget(m_pdeEnd);
pblbutton->addWidget(m_pbtnSearch);
pblbutton->addWidget(m_pbtnRefresh);
m_playout->addWidget(m_ptableWidget);
m_playout->addLayout(pblbutton);
}
void SCompanyListWidget::initTableWidget()
{
m_ptableWidget->setColumnCount(m_pslTableHeader->size());
m_ptableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
m_ptableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_ptableWidget->setSortingEnabled(true);
connect(m_ptableWidget, &QTableWidget::itemSelectionChanged,
this, &SCompanyListWidget::slotClickedItem);
}
void SCompanyListWidget::slotClickedItem()
{
qDebug() << "signalClickedItem";
auto kkk = getSelectedList();
foreach (auto& k, kkk)
{
qDebug() << k[0].text() << ", " << k[1].text() << ", " << k[2].text() << ", " << k[3].text();
}
emit signalClickedItem();
}
void SCompanyListWidget::resetTableHeader()
{
m_ptableWidget->clear();
m_ptableWidget->setHorizontalHeaderLabels(*m_pslTableHeader);
}
QVBoxLayout* SCompanyListWidget::getLayout() const
{
return m_playout;
}
void SCompanyListWidget::refresh()
{
QSqlDatabase db = QSqlDatabase::database(strDatabaseName);
if (db.open() == false)
{
messageBoxError("Error", "Database conncection error");
db.close();
return;
}
//select num, name, startdate, enddate from company join company_event_map where company.num = company_event_map.company_num
QString strQuery("select company.num, name, startdate, enddate, "
"count(company_event_map.company_num) as "
"cnt from company inner join company_event_map "
"on company.num = company_event_map.company_num group by company.num");
QSqlQuery query(db);
if (!query.exec(strQuery))
{
messageBoxError("Mysql Query error", strQuery + "\n\n" + query.lastError().text());
db.close();
return;
}
resetTableHeader();
m_ptableWidget->setRowCount(query.size());
int nRow = 0;
while (query.next())
{
QTableWidgetItem *itemCompany =
new QTableWidgetItem(query.value(static_cast<int>(E_TABLE_HEADER::COMPANY) + 1).toString());
itemCompany->setData(Qt::UserRole, query.value(0));
m_ptableWidget->setItem(nRow, static_cast<int>(E_TABLE_HEADER::COMPANY), itemCompany);
m_ptableWidget->setItem(nRow, static_cast<int>(E_TABLE_HEADER::START_DATE),
new QTableWidgetItem(query.value(static_cast<int>(E_TABLE_HEADER::START_DATE) + 1).toString()));
m_ptableWidget->setItem(nRow, static_cast<int>(E_TABLE_HEADER::END_DATE),
new QTableWidgetItem(query.value(static_cast<int>(E_TABLE_HEADER::END_DATE) + 1).toString()));
m_ptableWidget->setItem(nRow, static_cast<int>(E_TABLE_HEADER::EVENT_NUM),
new STableWidgetItem(QString::number(
query.value(static_cast<int>(E_TABLE_HEADER::EVENT_NUM) + 1).toInt())));
m_ptableWidget->setItem(nRow, static_cast<int>(E_TABLE_HEADER::STATUS),
new QTableWidgetItem(""));
m_ptableWidget->setRowHidden(nRow, false);
++nRow;
}
db.close();
resetSearchDate();
}
void SCompanyListWidget::resetSearchDate()
{
QDate startDate(2100, 12, 13);
QDate endDate(2000, 1, 1);
QDate _startDate;
QDate _endDate;
for (int i = 0; i < m_ptableWidget->rowCount(); ++i)
{
_startDate = QDateTime::fromString(
m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::START_DATE))->text(), "yyyy-MM-dd").date();
_endDate = QDateTime::fromString(
m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::END_DATE))->text(), "yyyy-MM-dd").date();
startDate = (startDate < _startDate) ? startDate : _startDate;
endDate = (endDate > _endDate) ? endDate : _endDate;
}
m_pdeStart->setDate(startDate);
m_pdeEnd->setDate(endDate);
}
void SCompanyListWidget::search()
{
QDate startDate = m_pdeStart->date();
QDate endDate = m_pdeEnd->date();
QDate _startDate;
QDate _endDate;
for (int i = 0; i < m_ptableWidget->rowCount(); ++i)
{
_startDate = QDateTime::fromString(
m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::START_DATE))->text(), "yyyy-MM-dd").date();
_endDate = QDateTime::fromString(
m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::END_DATE))->text(), "yyyy-MM-dd").date();
if (startDate <= _startDate && _endDate <= endDate)
m_ptableWidget->setRowHidden(i, false);
else
m_ptableWidget->setRowHidden(i, true);
}
}
void SCompanyListWidget::setRunning(int _id)
{
for (int i = 0; i < m_ptableWidget->rowCount(); ++i)
{
auto item = m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::COMPANY));
if (item->data(Qt::UserRole).toInt() == _id)
{
m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::STATUS))->setText("Running");
break;
}
}
}
void SCompanyListWidget::unsetRunning(int _id)
{
for (int i = 0; i < m_ptableWidget->rowCount(); ++i)
{
auto item = m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::COMPANY));
if (item->data(Qt::UserRole).toInt() == _id)
{
m_ptableWidget->item(i, static_cast<int>(E_TABLE_HEADER::STATUS))->setText("");
break;
}
}
}
void SCompanyListWidget::setRunning(const QVector<int>& _ids)
{
foreach (auto& _id, _ids)
{
setRunning(_id);
}
}
void SCompanyListWidget::unsetRunning(const QVector<int>& _ids)
{
foreach (auto& _id, _ids)
{
unsetRunning(_id);
}
}
/*
void SCompanyListWidget::setRunning(QVector<int>&& _ids)
{
foreach (auto& _id, _ids)
{
setRunning(_id);
}
}
void SCompanyListWidget::unsetRunning(QVector<int>&& _ids)
{
foreach (auto& _id, _ids)
{
unsetRunning(_id);
}
}
*/
QVector<QVector<QTableWidgetItem>> SCompanyListWidget::getSelectedList() const
{
QVector<QVector<QTableWidgetItem>> items;
auto modelIndexes = m_ptableWidget->selectionModel()->selectedRows();
foreach (auto& modelIndex, modelIndexes)
{
QVector<QTableWidgetItem> item;
item.append(QTableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast<int>(E_TABLE_HEADER::COMPANY))));
item.append(QTableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast<int>(E_TABLE_HEADER::START_DATE))));
item.append(QTableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast<int>(E_TABLE_HEADER::END_DATE))));
item.append(QTableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast<int>(E_TABLE_HEADER::EVENT_NUM))));
items.append(item);
}
return items;
}
/*
void SCompanyListWidget::selectedItem(int i)
{
}
*/

View File

@@ -0,0 +1,66 @@
#ifndef SCOMPANYLISTWIDGET
#define SCOMPANYLISTWIDGET
#include <QObject>
#include <memory>
#include <QVector>
class QPushButton;
class QTableWidget;
class QDateEdit;
class QVBoxLayout;
class QStringList;
class QTableWidgetItem;
class SCompanyListWidget:public QObject
{
Q_OBJECT
public:
SCompanyListWidget(QWidget* parent = nullptr);
~SCompanyListWidget();
void setRunning(int _id);
void unsetRunning(int _id);
void setRunning(const QVector<int>& _ids);
//void setRunning(QVector<int>&& _ids);
void unsetRunning(const QVector<int>& _ids);
//void unsetRunning(QVector<int>&& _ids);
QVector<QVector<QTableWidgetItem>> getSelectedList() const;
QVBoxLayout* getLayout() const;
public slots:
void refresh();
void search();
void slotClickedItem();
signals:
void signalClickedItem();
private:
void initTableWidget();
void initLayout();
void initCalender();
void initButton();
void initDatabase();
void resetTableHeader();
void resetSearchDate();
public:
enum class E_TABLE_HEADER;
private:
QPushButton* m_pbtnSearch;
QPushButton* m_pbtnRefresh;
QTableWidget* m_ptableWidget;
QDateEdit* m_pdeStart;
QDateEdit* m_pdeEnd;
QWidget* m_pwParent;
QVBoxLayout *m_playout;
std::unique_ptr<QStringList> m_pslTableHeader;
};
#endif // SCOMPANYLISTWIDGET

View File

@@ -0,0 +1,139 @@
#include "srunninglistwidget.h"
#include <QPushButton>
#include <QString>
#include <QVector>
#include <QTableWidget>
#include <QVBoxLayout>
#include <QSqlDatabase>
#include <QSettings>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
namespace
{
QString strDatabaseName("runninglist");
}
SRunningListWidget::SRunningListWidget(QWidget* parent) :
m_pwParent(parent), m_pbtnTimerStart(new QPushButton(parent)), m_pbtnTimerStop(new QPushButton(parent)),
m_pbtnForceStart(new QPushButton(parent)), m_pbtnForceStop(new QPushButton(parent)), m_ptableWidget(new QTableWidget(parent)),
m_playout(new QVBoxLayout(parent)), m_pslTableHeader(new QStringList)
{
*m_pslTableHeader << "Company" << "Start date" << "End date" << "Event Num" << "Status" << "Last Update Time";
initButton();
initDatabase();
initLayout();
initTableWidget();
}
void SRunningListWidget::initButton()
{
m_pbtnForceStart->setText("Force Start");
m_pbtnForceStop->setText("Force Stop");
m_pbtnTimerStart->setText("Timer Start");
m_pbtnTimerStop->setText("Timer Stop");
connect(m_pbtnForceStart, &QPushButton::released, this, &SRunningListWidget::)
}
void SRunningListWidget::initDatabase()
{
}
void SRunningListWidget::initTableWidget()
{
}
void SRunningListWidget::initLayout()
{
}
QVBoxLayout* SRunningListWidget::getLayout() const
{
}
void SRunningListWidget::delList(int _id)
{
}
void SRunningListWidget::delList(QVector<int> _ids)
{
}
void SRunningListWidget::resetTableHeader()
{
}
SRunningListWidget::~SRunningListWidget()
{
}
void SRunningListWidget::addList(QVector<QVector<QTableWidgetItem>> items)
{
}
void SRunningListWidget::enableBtnTimerStart(bool enable)
{
}
void SRunningListWidget::enableBtnTimerStop(bool enable)
{
}
void SRunningListWidget::enableBtnForceStart(bool enable)
{
}
void SRunningListWidget::enableBtnForceStop(bool enable)
{
}
void SRunningListWidget::setRunning(int _id)
{
}
void SRunningListWidget::setWaiting(int _id)
{
}
void SRunningListWidget::setComplete(int _id)
{
}
QVector<int> SRunningListWidget::getList()
{
}
void SRunningListWidget::slotTimerStart()
{
}
void SRunningListWidget::slotTimerStop()
{
}
void SRunningListWidget::slotForceStart()
{
}
void SRunningListWidget::slotForceStop()
{
}

View File

@@ -0,0 +1,72 @@
#ifndef SRUNNINGLISTWIDGET
#define SRUNNINGLISTWIDGET
#include <QObject>
#include <memory>
#include <QVector>
class QPushButton;
class QTableWidget;
class QDateEdit;
class QVBoxLayout;
class QStringList;
class QTableWidgetItem;
class SRunningListWidget:public QObject
{
Q_OBJECT
public:
enum class E_TABLE_HEADER;
public:
SRunningListWidget(QWidget* parent = nullptr);
QVBoxLayout* getLayout() const;
void delList(int _id);
void delList(QVector<int> _ids);
~SRunningListWidget();
private:
void initButton();
void initTableWidget();
void initDatabase();
void initLayout();
void resetTableHeader();
public slots:
void addList(QVector<QVector<QTableWidgetItem>> items);
QVector<int> getList();
void enableBtnTimerStart(bool enable);
void enableBtnTimerStop(bool enable);
void enableBtnForceStart(bool enable);
void enableBtnForceStop(bool enable);
void slotTimerStart();
void slotTimerStop();
void slotForceStart();
void slotForceStop();
void setRunning(int _id);
void setWaiting(int _id);
void setComplete(int _id);
signals:
void signalTimerStart();
void signalTimerStop();
void signalForceStart();
void signalForceStop();
private:
QPushButton* m_pbtnTimerStart;
QPushButton* m_pbtnTimerStop;
QPushButton* m_pbtnForceStart;
QPushButton* m_pbtnForceStop;
QTableWidget* m_ptableWidget;
QWidget* m_pwParent;
QVBoxLayout *m_playout;
std::unique_ptr<QStringList> m_pslTableHeader;
};
#endif // SRUNNINGLISTWIDGET

92
EffectUI/stimer.cpp Normal file
View File

@@ -0,0 +1,92 @@
#include "stimer.h"
#include <QTimer>
#include <QTime>
namespace
{
const int TIME = 300000; // 5 minute
}
STimer::STimer(): m_pTimer(new QTimer), m_nPreviousHour(-1)
{
m_pTimer->setInterval(TIME);
connect(&(*m_pTimer), &QTimer::timeout, this, &checkTimeout);
}
STimer::~STimer()
{
disconnect(&(*m_pTimer), &QTimer::timeout, this, &checkTimeout);
}
STimer::STimer(int time): STimer()
{
if (0 <= time && time < 24)
m_setTime.insert(time);
}
STimer::STimer(QVector<int> times): STimer()
{
foreach (int time, times)
{
if (0 <= time && time < 24)
m_setTime.insert(time);
}
}
void STimer::start()
{
if (!m_pTimer->isActive())
m_pTimer->start();
}
void STimer::stop()
{
if (m_pTimer->isActive())
m_pTimer->stop();
}
bool STimer::isActive() const noexcept
{
return m_pTimer->isActive();
}
void STimer::set(int time)
{
if (0 <= time && time < 24)
m_setTime.insert(time);
}
void STimer::set(QVector<int> times)
{
foreach (int time, times)
{
set(time);
}
}
void STimer::unset(int time)
{
m_setTime.remove(time);
}
void STimer::unset(QVector<int> times)
{
foreach (int time, times)
{
unset(time);
}
}
int STimer::timerId() const
{
return m_pTimer->timerId();
}
void STimer::checkTimeout()
{
QTime now = QTime::currentTime();
bool bChangedHour = (m_nPreviousHour == now.hour()) ? false : true;
m_nPreviousHour = now.hour();
if (bChangedHour && m_setTime.contains(now.hour()))
emit timeout();
}

48
EffectUI/stimer.h Normal file
View File

@@ -0,0 +1,48 @@
#ifndef STIMER
#define STIMER
#include <QObject>
#include <memory>
#include <QSet>
#include <QVector>
class QTimer;
class STimer:public QObject
{
Q_OBJECT
private:
std::unique_ptr<QTimer> m_pTimer;
QSet<int> m_setTime;
int m_nPreviousHour;
public:
explicit STimer();
explicit STimer(int time);
STimer(QVector<int> times);
STimer(const STimer& other) = delete;
STimer& operator=(const STimer& other) = delete;
void start();
void stop();
bool isActive() const noexcept;
void set(int time);
void set(QVector<int> times);
void unset(int time);
void unset(QVector<int> times);
int timerId() const;
~STimer();
signals:
void timeout();
private slots:
void checkTimeout();
};
#endif // STIMER

38
EffectUI/sutilclass.cpp Normal file
View File

@@ -0,0 +1,38 @@
#include "sutilclass.h"
STableWidgetItem::STableWidgetItem(int type): QTableWidgetItem(type)
{
}
STableWidgetItem::STableWidgetItem(const QIcon &icon, const QString &text, int type):
QTableWidgetItem(icon, text, type)
{
}
STableWidgetItem::STableWidgetItem(const QString &text, int type):
QTableWidgetItem(text, type)
{
}
STableWidgetItem::STableWidgetItem(const STableWidgetItem &other):
QTableWidgetItem(other)
{
}
bool STableWidgetItem::operator <(const QTableWidgetItem &other) const
{
bool ok1, ok2;
int nThis = text().toInt(&ok1);
int nOther = other.text().toInt(&ok2);
if (ok1 && ok2)
{
return nThis < nOther;
}
else
{
return text() < other.text();
}
}

18
EffectUI/sutilclass.h Normal file
View File

@@ -0,0 +1,18 @@
#ifndef SUTILCLASS
#define SUTILCLASS
#include <QTableWidgetItem>
class STableWidgetItem : public QTableWidgetItem
{
public:
STableWidgetItem(int type = Type);
STableWidgetItem(const QString & text, int type = Type);
STableWidgetItem(const QIcon & icon, const QString & text, int type = Type);
STableWidgetItem(const STableWidgetItem & other);
virtual bool operator<(const QTableWidgetItem & other) const override;
};
#endif // SUTILCLASS

View File

@@ -0,0 +1,30 @@
#include "sutilfunction.h"
#include <QString>
#include <QSettings>
#include <QSqlDatabase>
#include <QMessageBox>
void databaseSetting(const QString &str)
{
QSettings settings("effect.ini");
settings.beginGroup("database");
QString strHostName = settings.value("host", "182.162.171.147").toString();
QString strUser = settings.value("user", "admin").toString();
QString strPass = settings.value("pass", "admin123").toString();
QString strDbName = settings.value("name", "bigbird").toString();
settings.endGroup();
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", str);
db.setHostName(strHostName);
db.setDatabaseName(strDbName);
db.setUserName(strUser);
db.setPassword(strPass);
}
void messageBoxError(const QString &title, const QString &body)
{
QMessageBox messagebox(QMessageBox::Critical, title, body);
messagebox.exec();
}

9
EffectUI/sutilfunction.h Normal file
View File

@@ -0,0 +1,9 @@
#ifndef SUTILFUNCTION
#define SUTILFUNCTION
class QString;
void databaseSetting(const QString& str);
void messageBoxError(const QString& title, const QString &body);
#endif // SUTILFUNCTION

21
EffectUI/widget.cpp Normal file
View File

@@ -0,0 +1,21 @@
#include "widget.h"
#include "ui_widget.h"
#include "scompanylistwidget.h"
#include <QBoxLayout>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
SCompanyListWidget *c = new SCompanyListWidget(this);
setLayout(c->getLayout());
show();
c->refresh();
}
Widget::~Widget()
{
}

26
EffectUI/widget.h Normal file
View File

@@ -0,0 +1,26 @@
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <memory>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
std::unique_ptr<Ui::Widget> ui;
};
#endif // WIDGET_H

20
EffectUI/widget.ui Normal file
View File

@@ -0,0 +1,20 @@
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle" >
<string>Widget</string>
</property>
</widget>
<layoutDefault spacing="6" margin="11" />
<pixmapfunction></pixmapfunction>
<resources/>
<connections/>
</ui>