FaceAccess/Linguist/setUi/settingUiFaceMng.cpp
2024-07-11 11:27:12 +08:00

985 lines
35 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "settingUiFaceMng.h"
#include <QDebug>
#include "UiConfig.h"
#include <QButtonGroup>
#include "recoUiRecognize.h"
int settingUiFaceMng::m_pageIndex = 0;
settingUiFaceMng::settingUiFaceMng(int pageIndex, QWidget *parent)
: SettingUiPage(QVector<SettingUiPage::SetOpn>{
SetOpn(tr("人脸库(人)"), "xxxxx", myListWidget::enPropertyMoreArrow),
SetOpn(tr("通行记录(条)"), "xxxxxx", myListWidget::enPropertyMoreArrow)
}, parent)
{
m_pageIndex = pageIndex;
qDebug() << "settingUiFaceMng()";
}
settingUiFaceMng::~settingUiFaceMng()
{
qDebug() << "~settingUiFaceMng()";
}
void settingUiFaceMng::setBackstageUiinterface(BackstageInterfaceForUi* interface)
{
m_backstageIf = interface;
reset();
}
void settingUiFaceMng::reset()
{
if(nullptr == m_backstageIf){
return;
}
for(int i = 0; i < config.size(); i ++)
{
QListWidgetItem* pItem = m_listWidget->item(i);
myListWidget* wdt = dynamic_cast<myListWidget*>(m_listWidget->itemWidget(pItem));
if(wdt == nullptr){
return;
}
QString str;
switch(i)
{
case enFaceDb:
str = QString::number(m_backstageIf->getRegisterNum());
break;
case enAccessRecord:
str = QString::number(m_backstageIf->getAccessRecordQty());
break;
default:
break;
}
wdt->updateLabel(str);
}
}
void settingUiFaceMng::slotItemClicked(QListWidgetItem* item)
{
int row = m_listWidget->currentRow();
myListWidget* wdt = dynamic_cast<myListWidget*>(m_listWidget->itemWidget(item));
if(wdt == nullptr){
return;
}
switch(row){
case enFaceDb:
emit signalShowPage(FaceDbPage::m_pageIndex);
break;
case enAccessRecord:
emit signalShowPage(AccessRecordPage::m_pageIndex);
break;
default:
break;
}
}
int FaceDbPage::m_pageIndex = 0;
FaceDbPage::FaceDbPage(int pageIndex, QWidget *parent) : PersonMsgUiPage(parent)
{
qDebug() << "FaceDbPage";
m_pageIndex = pageIndex;
QLabel* label = new QLabel(tr("未搜索到相关人员"), m_stackWgt);
label->setAlignment(Qt::AlignHCenter);
m_stackWgt->addWidget(label);
}
void FaceDbPage::reset()
{
slotTextChanged("");
m_editSearch[enSearchOpnName]->clear();
}
void FaceDbPage::clickBtn_addPerson()
{
emit signalShowPage(AddPersonPage::m_pageIndex);
}
void FaceDbPage::slotTextChanged(const QString& text)
{
int searchOpnIndex = 0;
if(sender() == m_editSearch[enSearchOpnName]){
searchOpnIndex = static_cast<int>(enSearchOpnName);
qDebug() << "FaceDbPage text change:" << text;
m_sSearchName = text;
}
else if(sender() == m_editSearch[enSearchOpnTime]){
searchOpnIndex = static_cast<int>(enSearchOpnTime);
m_sSearchtime = text;
}
qDebug() << "m_sSearchName:" << m_sSearchName;
if(m_backstageIf){
unsigned personQty = m_backstageIf->queryPerson(m_sSearchName.toStdString().c_str());
//qDebug() << "queryPerson ret:" << personQty;
if(personQty){
showFaceMsg(0);
m_stackWgt->setCurrentIndex(0);
setPageControlBarHide(personQty <= m_itemQty, 1, static_cast<int>(!!(personQty % m_itemQty) + (personQty / m_itemQty)), 1);
}
else {
m_stackWgt->setCurrentIndex(1);
setPageControlBarHide(true);
}
}
if("" != text){
m_btnClearSearch[searchOpnIndex]->show();
m_labelTip[searchOpnIndex]->hide();
}
else {
m_btnClearSearch[searchOpnIndex]->hide();
m_labelTip[searchOpnIndex]->show();
}
}
void FaceDbPage::showFaceMsg(int pageIndex)
{
if(nullptr == m_backstageIf){
return;
}
stQueryPersonInfo person[m_itemQty];
#if 0
for(unsigned j=0; j<m_itemQty; j++){
person[j].name[0] = '\0';
person[j].imgPath[0] = '\0';
strcpy(person[j].expTime, tr("有效期:").toStdString().c_str());
strcpy(person[j].regTime, tr("注册时间:").toStdString().c_str());
}
#endif
m_lastPageIndex = pageIndex;
unsigned personReadQty = m_backstageIf->queryPerson(m_sSearchName.toStdString().c_str(), pageIndex, person, static_cast<int>(m_itemQty));
QVector<PersonMsgUiPage::MsgSet> msgs;
if(personReadQty){
for(unsigned i=0; i<personReadQty; i++){
if(i < 5)
{
m_person[i] = person[i];
}
const QVector<PersonMsgUiPage::MsgOpn> opns{{person[i].name.c_str(), PersonMsgUiPage::MsgOpnProp::enPropertyBold},
{QString(person[i].expTime.c_str()).lastIndexOf("3000") >= 0 ? tr("有效期:永久有效") : QString(person[i].expTime.c_str()),
PersonMsgUiPage::MsgOpnProp::enPropertyGreyWord},
{person[i].regTime.c_str(), PersonMsgUiPage::MsgOpnProp::enPropertyGreyWord}};
msgs.append(PersonMsgUiPage::MsgSet(person[i].imgPath.c_str(), opns));
}
#if 0
if(personReadQty < m_itemQty){
msgs.append(PersonMsgUiPage::MsgSet("", QVector<PersonMsgUiPage::MsgOpn>()));
}
#endif
}
showMsg(msgs);
}
void FaceDbPage::slotBtnClicked()
{
PersonMsgUiPage::slotBtnClicked();
showFaceMsg(m_toPageNum - 1);
}
void FaceDbPage::slotSliderReleased()
{
PersonMsgUiPage::slotSliderReleased();
showFaceMsg(m_toPageNum - 1);
}
void FaceDbPage::slotItemClicked(QListWidgetItem *item)
{
int row = m_listWidget->currentRow();
qDebug() << __PRETTY_FUNCTION__ << " row=" << row;
if(row < 5)
{
emit signalPersonInfo(m_person[row]);
emit signalShowPage(ModifyPersonPage::m_pageIndex);
}
}
void FaceDbPage::slot_freshPage()
{
qDebug() << __PRETTY_FUNCTION__;
//数据库更新,刷新最后一次的页面
if(nullptr == m_backstageIf){
return;
}
unsigned personQty = m_backstageIf->queryPerson(m_sSearchName.toStdString().c_str());
//qDebug() << "queryPerson ret:" << personQty;
if(personQty){
int maxPageNum = !!(personQty % m_itemQty) + (personQty / m_itemQty);
int showPageIndex = m_lastPageIndex < maxPageNum ? m_lastPageIndex : (maxPageNum-1);
showFaceMsg(showPageIndex);
m_stackWgt->setCurrentIndex(0);
setPageControlBarHide(personQty <= m_itemQty, 1, maxPageNum, showPageIndex+1);
}
else {
m_stackWgt->setCurrentIndex(1);
setPageControlBarHide(true);
}
}
int AccessRecordPage::m_pageIndex = 0;
AccessRecordPage::AccessRecordPage(int pageIndex, QWidget *parent) : PersonMsgUiPage(parent)
{
qDebug() << "AccessRecordPage";
m_pageIndex = pageIndex;
QLabel* label = new QLabel(tr("未搜索到相关通行记录"), m_stackWgt);
label->setAlignment(Qt::AlignHCenter);
m_stackWgt->addWidget(label);
showMoreSearchOpn();
}
void AccessRecordPage::slotTextChanged(const QString& text)
{
int searchOpnIndex = 0;
if(sender() == m_editSearch[enSearchOpnName]){
searchOpnIndex = static_cast<int>(enSearchOpnName);
qDebug() << "AccessRecordPage name text change:" << text;
m_sSearchName = text;
}
else if(sender() == m_editSearch[enSearchOpnTime]){
searchOpnIndex = static_cast<int>(enSearchOpnTime);
qDebug() << "AccessRecordPage time text change:" << text;
m_sSearchtime = text;
}
if(m_backstageIf){
unsigned recordQty = m_backstageIf->queryAccessRecord("" != m_sSearchName.toStdString() ? m_sSearchName.toStdString().c_str() : nullptr,
"" != m_sSearchtime.toStdString() ? m_sSearchtime.toStdString().c_str() : nullptr);
//qDebug() << "recordQty ret:" << recordQty;
if(recordQty){
showAccessRecordMsg(0);
m_stackWgt->setCurrentIndex(0);
setPageControlBarHide(recordQty <= m_itemQty, 1, static_cast<int>(!!(recordQty % m_itemQty) + (recordQty / m_itemQty)), 1);
}
else {
m_stackWgt->setCurrentIndex(1);
setPageControlBarHide(true);
}
}
if("" != text){
m_btnClearSearch[searchOpnIndex]->show();
m_labelTip[searchOpnIndex]->hide();
}
else {
m_btnClearSearch[searchOpnIndex]->hide();
m_labelTip[searchOpnIndex]->show();
}
}
void AccessRecordPage::showAccessRecordMsg(int pageIndex)
{
if(nullptr == m_backstageIf){
return;
}
stQueryAccRedInfo record[m_itemQty];
for(unsigned j=0; j<m_itemQty; j++){
record[j].name[0] = '\0';
record[j].imgPath[0] = '\0';
strcpy(record[j].accessTime, tr("通行时间:").toStdString().c_str());
}
qDebug() << "name:" << m_sSearchName << ", time:" << m_sSearchtime << ", page index:" << pageIndex;
unsigned recordQty = m_backstageIf->queryAccessRecord("" != m_sSearchName.toStdString() ? m_sSearchName.toStdString().c_str() : nullptr,
"" != m_sSearchtime.toStdString() ? m_sSearchtime.toStdString().c_str() : nullptr,
pageIndex, record, static_cast<int>(m_itemQty));
QVector<PersonMsgUiPage::MsgSet> msgs;
for(unsigned i=0; i<recordQty; i++){
const QVector<PersonMsgUiPage::MsgOpn> opns{
{record[i].name, PersonMsgUiPage::MsgOpnProp::enPropertyBold},
{record[i].accessTime, PersonMsgUiPage::MsgOpnProp::enPropertyGreyWord},
{record[i].allowPass ? tr("通过") : tr("不通过"),
record[i].allowPass ? PersonMsgUiPage::MsgOpnProp::enPropertyGreenWord : PersonMsgUiPage::MsgOpnProp::enPropertyRedWord}
};
msgs.append(PersonMsgUiPage::MsgSet(record[i].imgPath, opns));
}
#if 0
if(recordQty < m_itemQty){
msgs.append(PersonMsgUiPage::MsgSet("", QVector<PersonMsgUiPage::MsgOpn>()));
}
#endif
showMsg(msgs);
}
void AccessRecordPage::slotBtnClicked()
{
PersonMsgUiPage::slotBtnClicked();
if(sender() == m_btnPrePage || sender() == m_btnNextPage){
qDebug() << "slotBtnClicked : page num" << m_toPageNum;
showAccessRecordMsg(m_toPageNum - 1);
}
}
void AccessRecordPage::slotSliderReleased()
{
PersonMsgUiPage::slotSliderReleased();
qDebug() << "slotSliderReleased : page num" << m_toPageNum;
showAccessRecordMsg(m_toPageNum - 1);
}
void AccessRecordPage::reset()
{
m_sSearchtime = "";
slotTextChanged("");
m_editSearch[enSearchOpnName]->clear();
m_editSearch[enSearchOpnTime]->clear();
}
RegisterPersonPage::RegisterPersonPage(QWidget *parent) : MyWidgetWithMainStyleColor(parent)
{
m_listWidget = new QListWidget(this);
m_listWidget->setFrameStyle(QFrame::NoFrame);
m_listWidget->setCursor(QCursor(Qt::PointingHandCursor));
m_listWidget->setFocusPolicy(Qt::NoFocus);
m_listWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_listWidget->setSpacing(0);
m_listWidget->setStyleSheet("QListWidget{border-width:0;border-style:outset; background:rgb(255, 255, 255);border-top: 1px solid #DFDDEB;}"
"QListWidget::item{border-bottom: 1px solid #DFDDEB;}"
"QListWidget::Item:hover{background:transparent;}"
"QListWidget::item:selected{background:transparent; }");
m_listWidget->setFixedSize(UiConfig::GetInstance()->getUiWidth(), static_cast<int>(UiConfig::GetInstance()->getUiHeight() / 0.6));
connect(m_listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(slotItemClicked(QListWidgetItem*)));
//图片
m_picWidget = new QWidget(this);
m_picLabel = new QLabel(m_picWidget);
m_picLabel->setFixedSize(static_cast<int>(UiConfig::GetInstance()->getUiWidth() / 4), static_cast<int>(UiConfig::GetInstance()->getUiHeight() / 10));
//m_picLabel->setStyleSheet("background-color: white;");
QLabel *label_pic = new QLabel("*人脸图片", m_picWidget);
QHBoxLayout* picWidgetLayout = new QHBoxLayout();
//QSpacerItem* hSpace1 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
picWidgetLayout->addWidget(label_pic);
picWidgetLayout->addWidget(m_picLabel, 0, Qt::AlignRight);
m_picWidget->setLayout(picWidgetLayout);
//QPixmap faceImg(":/res/image/add.png");
QPixmap faceImg(":/res/image/add.jpg");
m_picLabel->setPixmap(ScalePixmap2Label(faceImg, *m_picLabel));
//m_picLabel->setFixedSize(104, 105);
//m_picLabel->setPixmap(faceImg);
//m_picLabel->setPixmap(ScalePixmap(faceImg, QSize(m_picLabel->width()-1, m_picLabel->height()-1)));
//授权期限选择
m_deadlineChoiceWidget = new QWidget(this);
m_deadlineBtnGrp = new QButtonGroup(m_deadlineChoiceWidget);
QLabel *label_choice = new QLabel("*授权", m_deadlineChoiceWidget);
m_durableBtn = new QRadioButton(m_deadlineChoiceWidget);
m_durableBtn->setText(tr("永久授权"));
m_durableBtn->setStyleSheet(QString("QRadioButton::indicator { width: %1px; height: %2px; }")
.arg(UiConfig::GetInstance()->getUiHeight() / 30)
.arg(UiConfig::GetInstance()->getUiHeight() / 30));
m_durableBtn->setStyleSheet("QRadioButton::indicator:unchecked{image: url(:/res/image/select_1.png);}"
"QRadioButton::indicator:checked{image: url(:/res/image/select_2.png);}");
m_durableBtn->setFocusPolicy(Qt::NoFocus);
m_nondurableBtn = new QRadioButton(m_deadlineChoiceWidget);
m_nondurableBtn->setText(tr("非永久授权"));
m_nondurableBtn->setStyleSheet(QString("QRadioButton::indicator { width: %1px; height: %2px; }")
.arg(UiConfig::GetInstance()->getUiHeight() / 30)
.arg(UiConfig::GetInstance()->getUiHeight() / 30));
m_nondurableBtn->setStyleSheet("QRadioButton::indicator:unchecked{image: url(:/res/image/select_1.png);}"
"QRadioButton::indicator:checked{image: url(:/res/image/select_2.png);}");
m_nondurableBtn->setFocusPolicy(Qt::NoFocus);
m_deadlineBtnGrp->addButton(m_durableBtn, 0);
m_deadlineBtnGrp->addButton(m_nondurableBtn, 1);
m_durableBtn->setChecked(true);
QHBoxLayout* deadlineChoiceLayout = new QHBoxLayout();
deadlineChoiceLayout->addWidget(label_choice);
deadlineChoiceLayout->addWidget(m_durableBtn);
deadlineChoiceLayout->addWidget(m_nondurableBtn);
m_deadlineChoiceWidget->setLayout(deadlineChoiceLayout);
connect(m_deadlineBtnGrp, SIGNAL(buttonClicked(int)), this, SLOT(slotDeadlineBtnClicked(int)));
m_nameWidget = new myListWidget(myListWidget::SetOpnCfg(tr("*姓名"), "", myListWidget::enPropertyMoreArrow));
m_deadlineWidget = new myListWidget(myListWidget::SetOpnCfg(tr("*授权截至日期"), "", myListWidget::enPropertyMoreArrow));
m_jobNumWidget = new myListWidget(myListWidget::SetOpnCfg(tr("工号"), "", myListWidget::enPropertyMoreArrow));
m_phoneNumWidget = new myListWidget(myListWidget::SetOpnCfg(tr("手机号"), "", myListWidget::enPropertyMoreArrow));
m_idCardWidget = new myListWidget(myListWidget::SetOpnCfg(tr("身份证号"), "", myListWidget::enPropertyMoreArrow));
m_icCardWidget = new myListWidget(myListWidget::SetOpnCfg(tr("IC卡/NFC"), "", myListWidget::enPropertyMoreArrow));
QListWidgetItem* pItem;
pItem = new QListWidgetItem(m_listWidget);
pItem->setSizeHint(QSize(UiConfig::GetInstance()->getUiHeight() / 8, UiConfig::GetInstance()->getUiHeight() / 8));
m_listWidget->setItemWidget(pItem, m_picWidget);
pItem = new QListWidgetItem(m_listWidget);
pItem->setSizeHint(QSize(UiConfig::GetInstance()->getUiHeight() / 12, UiConfig::GetInstance()->getUiHeight() / 12));
m_listWidget->setItemWidget(pItem, m_nameWidget);
pItem = new QListWidgetItem(m_listWidget);
pItem->setSizeHint(QSize(UiConfig::GetInstance()->getUiHeight() / 12, UiConfig::GetInstance()->getUiHeight() / 12));
m_listWidget->setItemWidget(pItem, m_deadlineChoiceWidget);
pItem = new QListWidgetItem(m_listWidget);
pItem->setSizeHint(QSize(UiConfig::GetInstance()->getUiHeight() / 12, UiConfig::GetInstance()->getUiHeight() / 12));
m_listWidget->setItemWidget(pItem, m_deadlineWidget);
pItem = new QListWidgetItem(m_listWidget);
pItem->setSizeHint(QSize(UiConfig::GetInstance()->getUiHeight() / 12, UiConfig::GetInstance()->getUiHeight() / 12));
m_listWidget->setItemWidget(pItem, m_jobNumWidget);
pItem = new QListWidgetItem(m_listWidget);
pItem->setSizeHint(QSize(UiConfig::GetInstance()->getUiHeight() / 12, UiConfig::GetInstance()->getUiHeight() / 12));
m_listWidget->setItemWidget(pItem, m_phoneNumWidget);
pItem = new QListWidgetItem(m_listWidget);
pItem->setSizeHint(QSize(UiConfig::GetInstance()->getUiHeight() / 12, UiConfig::GetInstance()->getUiHeight() / 12));
m_listWidget->setItemWidget(pItem, m_idCardWidget);
pItem = new QListWidgetItem(m_listWidget);
pItem->setSizeHint(QSize(UiConfig::GetInstance()->getUiHeight() / 12, UiConfig::GetInstance()->getUiHeight() / 12));
m_listWidget->setItemWidget(pItem, m_icCardWidget);
m_bottomBtn = new QPushButton(this);
m_bottomBtn->setFocusPolicy(Qt::NoFocus);
m_bottomBtn->setMinimumSize(UiConfig::GetInstance()->getUiWidth() / 3, UiConfig::GetInstance()->getUiHeight() / 15);
//m_bottomBtn->setMinimumWidth(UiConfig::GetInstance()->getUiWidth() / 3);
m_bottomBtn->setStyleSheet("color:white;"
"background-color: blue;"
"border:none;"
"border-radius: 3px");
QLabel *tip = new QLabel(this);
tip->setText("<p style='line-height:100%;'><font size='+0' color=blue>可以刷卡写入IC卡</font></p>");
QHBoxLayout* hbLayout = new QHBoxLayout();
QSpacerItem* hSpace1 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
QSpacerItem* hSpace2 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
hbLayout->addItem(hSpace1);
hbLayout->addWidget(m_bottomBtn);
hbLayout->addItem(hSpace2);
QVBoxLayout* vbLayout = new QVBoxLayout();
vbLayout->addWidget(m_listWidget, 0, Qt::AlignCenter);
vbLayout->addWidget(tip);
vbLayout->addLayout(hbLayout, 1);
vbLayout->setSpacing(20);
vbLayout->setMargin(10);
setLayout(vbLayout);
m_listWidget->setItemHidden(m_listWidget->item(PERSON_ITEM_DEADLINE), true);
}
void RegisterPersonPage::slotSetPersonInfo(stQueryPersonInfo &personInfo)
{
m_personInfo = personInfo;
m_snapFeature.clear();
m_snapPicPath.clear();
refreshUi();
}
void RegisterPersonPage::slotSnapFace(string &feature, string &picPath)
{
m_snapFeature = feature;
m_snapPicPath = picPath;
m_picLabel->clear();
QPixmap faceImg(m_snapPicPath.c_str());
m_picLabel->setPixmap(ScalePixmap2Label(faceImg, *m_picLabel));
}
void RegisterPersonPage::slotIcCardResult(const QString &icCard)
{
m_icCardWidget->updateLabel(icCard);
}
void RegisterPersonPage::clearPersonInfo()
{
m_personInfo.clear();
m_snapFeature.clear();
m_snapPicPath.clear();
refreshUi();
}
void RegisterPersonPage::refreshUi()
{
m_picLabel->clear();
if(m_personInfo.imgPath.empty())
{
//QPixmap faceImg(":/res/image/add.png");
QPixmap faceImg(":/res/image/add.jpg");
m_picLabel->setPixmap(ScalePixmap2Label(faceImg, *m_picLabel));
}else
{
QPixmap faceImg(m_personInfo.imgPath.c_str());
m_picLabel->setPixmap(ScalePixmap2Label(faceImg, *m_picLabel));
}
bool isDurable = (m_personInfo.expTime.empty() ||
QString(m_personInfo.expTime.c_str()).lastIndexOf("3000") >= 0) ? true : false;
isDurable ? m_durableBtn->setChecked(true) : m_nondurableBtn->setChecked(true);
m_listWidget->setItemHidden(m_listWidget->item(PERSON_ITEM_DEADLINE), isDurable);
m_deadlineWidget->updateLabel(isDurable ? "" : m_personInfo.expTime.c_str());
m_nameWidget->updateLabel(m_personInfo.name.c_str());
m_jobNumWidget->updateLabel(m_personInfo.jobNum.c_str());
m_phoneNumWidget->updateLabel(m_personInfo.phoneNum.c_str());
m_idCardWidget->updateLabel(m_personInfo.idNum.c_str());
m_icCardWidget->updateLabel(m_personInfo.icNum.c_str());
}
#if 0
void RegisterPersonPage::setInfo(dbspace::rwFeatInfo *pFeatInfo, dbspace::rwPersonInfo *pPersonInfo)
{
#if 0
m_featInfo.clear();
m_personInfo.clear();
if(pFeatInfo != nullptr)
{
m_featInfo = *pFeatInfo;
}
if(pFeatInfo != nullptr)
{
m_personInfo = *pPersonInfo;
}
#endif
}
#endif
void RegisterPersonPage::slotItemClicked(QListWidgetItem *item)
{
int row = m_listWidget->currentRow();
//dynamic_cast<myListWidget*>(m_listWidget->itemWidget(item));
//QWidget* pItemWidget = m_listWidget->itemWidget(item);
qDebug() << __PRETTY_FUNCTION__ << "row=" << row;
switch (row) {
#if 0
case PERSON_ITEM_PIC:
//turn to snap photo page
emit signalShowPage(SnapFacePage::m_pageIndex);
break;
#endif
case PERSON_ITEM_NAME:
{
myListWidget* wdt = dynamic_cast<myListWidget*>(m_listWidget->itemWidget(item));
if(wdt == nullptr){
return;
}
LineEditInputDialog dlg(wdt->getOpnLabelString(), parent()->parent());
if(dlg.exec() == QDialog::Accepted)
{
QString setStr = dlg.getRow(0);
#if 0
if(setStr.isEmpty())
{
InfoDialog(tr("设置有误,请重新输入!"), parent()->parent()).exec();
}else
#endif
{
wdt->updateLabel(setStr);
}
}
}
break;
#if 0
case PERSON_ITEM_DEADLINE_CHOICE:
break;
#endif
case PERSON_ITEM_DEADLINE:
{
myListWidget* wdt = dynamic_cast<myListWidget*>(m_listWidget->itemWidget(item));
if(wdt == nullptr){
return;
}
//QDateTime::fromString(wdt->getLabelString(), "yyyy-MM-dd hh:mm");
//DateTimeDialog dateTimeDlg(QDateTime::currentDateTime(), parent()->parent());
DateTimeDialog dateTimeDlg(wdt->getLabelString().isEmpty() ? QDateTime::currentDateTime() : QDateTime::fromString(wdt->getLabelString(), "yyyy-MM-dd hh:mm"), parent()->parent());
if(dateTimeDlg.exec() == QDialog::Accepted)
{
wdt->updateLabel(dateTimeDlg.getValueSet().toString("yyyy-MM-dd hh:mm"));
}
}
break;
case PERSON_ITEM_JOB_NUM:
{
myListWidget* wdt = dynamic_cast<myListWidget*>(m_listWidget->itemWidget(item));
if(wdt == nullptr){
return;
}
LineEditInputDialog dlg(wdt->getOpnLabelString(), parent()->parent());
if(dlg.exec() == QDialog::Accepted)
{
QString setStr = dlg.getRow(0);
#if 0
if(setStr.isEmpty())
{
InfoDialog(tr("设置有误,请重新输入!"), parent()->parent()).exec();
}else
#endif
{
wdt->updateLabel(setStr);
}
}
}
break;
case PERSON_ITEM_PHONE_NUM:
{
myListWidget* wdt = dynamic_cast<myListWidget*>(m_listWidget->itemWidget(item));
if(wdt == nullptr){
return;
}
LineEditInputDialog dlg(wdt->getOpnLabelString(), parent()->parent());
if(dlg.exec() == QDialog::Accepted)
{
QString setStr = dlg.getRow(0);
#if 0
if(setStr.isEmpty())
{
InfoDialog(tr("设置有误,请重新输入!"), parent()->parent()).exec();
}else
#endif
{
wdt->updateLabel(setStr);
}
}
}
break;
case PERSON_ITEM_ID_CARD:
{
myListWidget* wdt = dynamic_cast<myListWidget*>(m_listWidget->itemWidget(item));
if(wdt == nullptr){
return;
}
LineEditInputDialog dlg(wdt->getOpnLabelString(), parent()->parent());
if(dlg.exec() == QDialog::Accepted)
{
QString setStr = dlg.getRow(0);
#if 0
if(setStr.isEmpty())
{
InfoDialog(tr("设置有误,请重新输入!"), parent()->parent()).exec();
}else
#endif
{
wdt->updateLabel(setStr);
}
}
}
break;
case PERSON_ITEM_IC_CARD:
{
myListWidget* wdt = dynamic_cast<myListWidget*>(m_listWidget->itemWidget(item));
if(wdt == nullptr){
return;
}
LineEditInputDialog dlg(wdt->getOpnLabelString(), parent()->parent());
if(dlg.exec() == QDialog::Accepted)
{
QString setStr = dlg.getRow(0);
#if 0
if(setStr.isEmpty())
{
InfoDialog(tr("设置有误,请重新输入!"), parent()->parent()).exec();
}else
#endif
{
wdt->updateLabel(setStr);
}
}
}
break;
default:
break;
}
}
void RegisterPersonPage::slotDeadlineBtnClicked(int id)
{
qDebug() << __PRETTY_FUNCTION__ << "id=" << id;
if(id == 0)
{
m_listWidget->setItemHidden(m_listWidget->item(PERSON_ITEM_DEADLINE), true);
}else if(id == 1)
{
m_listWidget->setItemHidden(m_listWidget->item(PERSON_ITEM_DEADLINE), false);
}
}
int AddPersonPage::m_pageIndex = 0;
AddPersonPage::AddPersonPage(int pageIndex, QWidget *parent) : RegisterPersonPage(parent)
{
qDebug() << "AddPersonPage";
m_pageIndex = pageIndex;
m_bottomBtn->setText(tr("确认添加"));
connect(m_bottomBtn, SIGNAL(clicked(bool)), this, SLOT(slotAddPerson()));
}
void AddPersonPage::reset()
{
clearPersonInfo();
m_backstageIf->startIdentyState(false, true);
}
void AddPersonPage::slotItemClicked(QListWidgetItem *item)
{
int row = m_listWidget->currentRow();
//dynamic_cast<myListWidget*>(m_listWidget->itemWidget(item));
//QWidget* pItemWidget = m_listWidget->itemWidget(item);
qDebug() << __PRETTY_FUNCTION__ << "row=" << row;
switch (row) {
case PERSON_ITEM_PIC:
//turn to snap photo page
emit signalShowPage(SnapFacePage::m_pageIndex);
break;
default:
break;
}
RegisterPersonPage::slotItemClicked(item);
}
void AddPersonPage::slotAddPerson()
{
qDebug() << __PRETTY_FUNCTION__;
if(nullptr == m_backstageIf){
return;
}
QString showText = tr("确定新增人员?");
QuestionDialog dlg(showText, parent()->parent(), tr("确定"));
if(QDialog::Accepted != dlg.exec()){
return;
}
stQueryPersonInfo personInfo;
//personInfo.personId = m_personInfo.personId;
personInfo.name = m_nameWidget->getLabelString().toStdString();
personInfo.expTime = m_durableBtn->isChecked() ? std::string("3000-12-31 00:00") : m_deadlineWidget->getLabelString().toStdString();;
personInfo.idNum = m_idCardWidget->getLabelString().toStdString();
personInfo.icNum = m_icCardWidget->getLabelString().toStdString();
personInfo.jobNum = m_jobNumWidget->getLabelString().toStdString();
personInfo.phoneNum = m_phoneNumWidget->getLabelString().toStdString();
personInfo.imgPath = m_snapPicPath;
personInfo.feature = m_snapFeature;
if(personInfo.name.empty() || personInfo.expTime.empty() ||
personInfo.imgPath.empty() || personInfo.feature.empty())
{
InfoDialog(tr("请补全*信息!"), parent()->parent()).exec();
return;
}
int ret = m_backstageIf->addPerson(personInfo);
if(ret == 0)
{
emit signalChangePersonDB();
emit signalReturn();
}else
{
qDebug() << __PRETTY_FUNCTION__ << "addPerson err:" << ret;
if(ret == -99)
{
InfoDialog(tr("注册失败,已达到最大注册人数!"), parent()->parent()).exec();
}else if(ret == -6)
{
InfoDialog(tr("IC卡号重复"), parent()->parent()).exec();
}else if(ret == -5)
{
InfoDialog(tr("注册人员失败,请重新抓拍!"), parent()->parent()).exec();
}else if (ret == -7)
{
InfoDialog(tr("身份证号已存在!"), parent()->parent()).exec();
}else
{
InfoDialog(tr("注册人员失败!"), parent()->parent()).exec();
}
}
}
int ModifyPersonPage::m_pageIndex = 0;
ModifyPersonPage::ModifyPersonPage(int pageIndex, QWidget *parent) : RegisterPersonPage(parent)
{
qDebug() << "ModifyPersonPage";
m_pageIndex = pageIndex;
m_bottomBtn->setText(tr("删除人员"));
connect(m_bottomBtn, SIGNAL(clicked(bool)), this, SLOT(slotDelPerson()));
}
void ModifyPersonPage::reset()
{
m_backstageIf->startIdentyState(false, true);
}
void ModifyPersonPage::savePersonInfo()
{
qDebug() << __PRETTY_FUNCTION__;
if(nullptr == m_backstageIf){
return;
}
QString showText = tr("确定更改人员信息?");
QuestionDialog dlg(showText, parent()->parent(), tr("确定"));
if(QDialog::Accepted != dlg.exec()){
return;
}
stQueryPersonInfo personInfo;
personInfo.personId = m_personInfo.personId;
personInfo.name = m_nameWidget->getLabelString().toStdString();
personInfo.expTime = m_durableBtn->isChecked() ? std::string("3000-12-31 00:00") : m_deadlineWidget->getLabelString().toStdString();;
personInfo.idNum = m_idCardWidget->getLabelString().toStdString();
personInfo.icNum = m_icCardWidget->getLabelString().toStdString();
personInfo.jobNum = m_jobNumWidget->getLabelString().toStdString();
personInfo.phoneNum = m_phoneNumWidget->getLabelString().toStdString();
if(personInfo.name.empty() || personInfo.expTime.empty())
{
InfoDialog(tr("请补全*信息!"), parent()->parent()).exec();
return;
}
int ret = m_backstageIf->modifyPerson(personInfo);
if(ret == 0)
{
emit signalChangePersonDB();
emit signalReturn();
}else
{
qDebug() << __PRETTY_FUNCTION__ << "modifyPerson err:" << ret;
if(ret == -2)
{
InfoDialog(tr("无效的姓名!"), parent()->parent()).exec();
}else if(ret == -3)
{
InfoDialog(tr("IC卡号重复"), parent()->parent()).exec();
}else if(ret == -6)
{
InfoDialog(tr("身份证号已存在!"), parent()->parent()).exec();
}else
{
InfoDialog(tr("更改人员信息失败,人员或已被删除!"), parent()->parent()).exec();
emit signalChangePersonDB();
//emit signalReturn();
}
}
}
void ModifyPersonPage::slotDelPerson()
{
qDebug() << __PRETTY_FUNCTION__;
if(nullptr == m_backstageIf){
return;
}
QString showText = tr("确定删除改人员?");
QuestionDialog dlg(showText, parent()->parent(), tr("确定"));
if(QDialog::Accepted != dlg.exec()){
return;
}
m_backstageIf->delPerson(m_personInfo.personId);
emit signalChangePersonDB();
emit signalReturn();
}
const QString SnapFacePage::BG_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY] = {
":/res/image/face-small.png",
":/res/image/jinggong-face-middle.png",
":/res/image/face_720_1280.png",
":/res/image/jinggong-face-middle.png",
":/res/image/face_720_1280.png"
};
int SnapFacePage::m_pageIndex = 0;
SnapFacePage::SnapFacePage(int pageIndex, QWidget *parent) : WidgetWithBackstageInterface(parent)
{
qDebug() << "SnapFacePage";
m_pageIndex = pageIndex;
m_btn_snap = new QPushButton(this);
m_btn_snap->setFocusPolicy(Qt::NoFocus);
int radius_w = (UiConfig::GetInstance()->getUiWidth() * 0.2) / 2;
int radius_h = (UiConfig::GetInstance()->getUiHeight() * 0.1) / 2;
int radius = min(radius_w, radius_h);
m_btn_snap->setFixedSize(radius*2, radius*2);
m_btn_snap->setStyleSheet(QString("background-color: white;"
"border-radius: %1px;").arg(radius));
m_btn_snap->setText(tr("拍照"));
connect(m_btn_snap, SIGNAL(clicked(bool)), this, SLOT(slotSnapBtnClicked()));
#if 0
m_btn_snap->move((UiConfig::GetInstance()->getUiWidth() - m_btn_snap->width()) / 2,
UiConfig::GetInstance()->getUiHeight()*0.95 - m_btn_snap->height() );
#endif
QHBoxLayout* hbLayout = new QHBoxLayout();
QSpacerItem* hSpace1 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
QSpacerItem* hSpace2 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
hbLayout->addItem(hSpace1);
hbLayout->addWidget(m_btn_snap);
hbLayout->addItem(hSpace2);
QSpacerItem* vSpace1 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding);
QVBoxLayout* vbLayout = new QVBoxLayout();
vbLayout->addItem(vSpace1);
vbLayout->addLayout(hbLayout);
//vbLayout->setSpacing(20);
//vbLayout->setMargin(10);
setLayout(vbLayout);
setAutoFillBackground(true);
//setStyleSheet("background-color: transparent;");
#if 0
resize(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight());
QPalette pal = palette();
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));
setPalette(pal);
//QPalette palette(this->palette());
//palette.setColor(QPalette::WindowText,Qt::black);
#endif
#if 1
resize(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight());
QPalette palette(this->palette());
palette.setColor(QPalette::WindowText,Qt::white);
//palette.setBrush(QPalette::Window,QBrush(QPixmap(CenterMsgWidget::BG_RES_FILE[UiConfig::GetInstance()->getScreenConfigIndex()])));
palette.setBrush(QPalette::Window,QBrush(QPixmap(BG_RES_FILE[UiConfig::GetInstance()->getScreenConfigIndex()])));
setPalette(palette);
#endif
//setWindowOpacity(1);
//setAttribute(Qt::WA_TranslucentBackground, true);
}
void SnapFacePage::reset()
{
//vo显示设置
if(nullptr == m_backstageIf){
return;
}
m_backstageIf->recoUiTypeSwitch(0, 0, UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight());
}
void SnapFacePage::slotSnapBtnClicked()
{
qDebug() << __PRETTY_FUNCTION__;
if(nullptr == m_backstageIf){
return;
}
#if 0
MsgDialog msgdlg(tr("抓拍人脸中,请稍候..."), parent()->parent());
msgdlg.show();
QCoreApplication::processEvents();//处理qt事件刷新ui
#endif
std::string feature;
std::string savePath("/tmp/test.jpg");
int ret = m_backstageIf->snapFace(feature, savePath);
qDebug() << __PRETTY_FUNCTION__ << "ret=" << ret;
if(ret !=0)
{
InfoDialog(tr("抓拍人脸失败,请重拍!"), parent()->parent()).exec();
}else
{
emit signalSnapFace(feature, savePath);
emit signalReturn();
}
}