From 656f46c17ec12533475a79469578c8d1ba135c5a Mon Sep 17 00:00:00 2001 From: xueyan hu <576627988@qq.com> Date: Tue, 28 Dec 2021 18:23:02 +0800 Subject: [PATCH] translation improvement --- cfgs/usct-product.json | 9 +- src/AccountTableForm.cpp | 216 +++++++++++---------- src/AdminSettingForm.cpp | 11 +- src/ScanFormWidget.cpp | 14 ++ src/SelectDialog.cpp | 24 +-- src/SelectFormWidget.cpp | 15 ++ src/UserOperationLogForm.cpp | 9 +- src/device/networkmanager.cpp | 18 +- src/device/networkmanager.h | 4 +- src/dicomcfgdialog.ui | 319 ++++++++++++++++++++++++++++++++ src/editpatientform.cpp | 236 ++++++++++++----------- src/generalform.cpp | 7 +- src/icons/dicomsettings.png | Bin 0 -> 4902 bytes src/icons/dicomsettings_d.png | Bin 0 -> 4838 bytes src/icons/networksettings.png | Bin 0 -> 14283 bytes src/icons/networksettings_d.png | Bin 0 -> 13760 bytes src/json/jsonobject.cpp | 8 +- src/json/jsonobject.h | 2 +- src/network/dicomcfgdialog.cpp | 95 ++++++++++ src/network/dicomcfgdialog.h | 25 +++ src/network/networkcfgdialog.h | 7 +- src/networkcfgdialog.ui | 103 +++++++++-- src/res.qrc | 4 + src/stylesheet/Dark2.qss | 2 +- src/systemsettingform.cpp | 127 +++---------- src/systemsettingform.h | 3 - src/systemsettingform.ui | 294 ++++++++--------------------- src/translations/en_US.ts | 173 ++++++++++------- src/translations/en_US.ts.bak | 173 ++++++++++------- src/translations/zh_CN.qm | Bin 9671 -> 10018 bytes src/translations/zh_CN.ts | 318 +++++++++++++++++++++---------- src/translations/zh_CN.ts.bak | 318 +++++++++++++++++++++---------- 32 files changed, 1620 insertions(+), 914 deletions(-) create mode 100644 src/dicomcfgdialog.ui create mode 100644 src/icons/dicomsettings.png create mode 100644 src/icons/dicomsettings_d.png create mode 100644 src/icons/networksettings.png create mode 100644 src/icons/networksettings_d.png create mode 100644 src/network/dicomcfgdialog.cpp create mode 100644 src/network/dicomcfgdialog.h diff --git a/cfgs/usct-product.json b/cfgs/usct-product.json index 601c693..d0d8305 100644 --- a/cfgs/usct-product.json +++ b/cfgs/usct-product.json @@ -51,12 +51,6 @@ "name": "pacsserver22", "port": "102" }, - "daq": { - "ae": "MOON", - "ip": "127.0.0.3", - "name": "daq", - "port": "103" - }, "recon": { "ae": "TURTLE", "ip": "127.0.0.4", @@ -68,6 +62,9 @@ "dhcp": "true", "ip": "192.168.1.197", "mask": "255.255.255.0", + "ae": "MOON", + "name": "daq", + "port": "103", "additional": [{ "ip": "192.168.2.197", "netmask": "255.255.255.0" diff --git a/src/AccountTableForm.cpp b/src/AccountTableForm.cpp index c95b1f6..94bc5ef 100644 --- a/src/AccountTableForm.cpp +++ b/src/AccountTableForm.cpp @@ -15,112 +15,126 @@ #include #include "components/SlideableTableView.h" #include "AccountFormDialog.h" +#include "event/EventCenter.h" +AccountTableForm::AccountTableForm(QWidget* parent) { + layout = new QVBoxLayout(this); + layout->setMargin(0); + QTableView* table = new SlideableTableView(this); + layout->addWidget(table); + // TableView for patient + table->setAlternatingRowColors(true); + table->setSelectionMode(QAbstractItemView::SingleSelection); + table->setEditTriggers(QAbstractItemView::NoEditTriggers); + table->setSelectionBehavior(QAbstractItemView::SelectRows); + table->verticalHeader()->setDefaultSectionSize(38); + table->horizontalHeader()->setStretchLastSection(true); + //data from SQLITE -AccountTableForm::AccountTableForm(QWidget *parent) { - layout = new QVBoxLayout(this); - layout->setMargin(0); - QTableView* table = new SlideableTableView(this); - layout->addWidget(table); - // TableView for patient - table->setAlternatingRowColors(true); - table->setSelectionMode(QAbstractItemView::SingleSelection); - table->setEditTriggers(QAbstractItemView::NoEditTriggers); - table->setSelectionBehavior(QAbstractItemView::SelectRows); - table->verticalHeader()->setDefaultSectionSize(38); - table->horizontalHeader()->setStretchLastSection(true); - //data from SQLITE + auto model = SQLHelper::getTable("Account"); + model->sort(5, Qt::DescendingOrder); + model->select(); + model->setHeaderData(1, Qt::Horizontal, tr("ID")); + model->setHeaderData(2, Qt::Horizontal, tr("Name")); + model->setHeaderData(4, Qt::Horizontal, tr("Role")); + model->setHeaderData(5, Qt::Horizontal, tr("Comment")); + table->setModel((QAbstractItemModel*)model); + table->hideColumn(0); + table->hideColumn(3); + AccountRoleComboDelegate* comboDelegate = new AccountRoleComboDelegate(this); + table->setItemDelegateForColumn(4, comboDelegate); + table->show(); - auto model = SQLHelper::getTable("Account"); - model->sort(5,Qt::DescendingOrder); - model->select(); - model->setHeaderData(1,Qt::Horizontal,"ID"); - model->setHeaderData(2,Qt::Horizontal,"Name"); - model->setHeaderData(4,Qt::Horizontal,"Role"); - model->setHeaderData(5,Qt::Horizontal,"Comment"); - table->setModel((QAbstractItemModel*)model); - table->hideColumn(0); - table->hideColumn(3); - AccountRoleComboDelegate* comboDelegate = new AccountRoleComboDelegate(this); - table->setItemDelegateForColumn(4,comboDelegate); - table->show(); + // table->setSortingEnabled(true); + table->setColumnWidth(1, 250); + table->setColumnWidth(2, 250); + table->setColumnWidth(4, 150); -// table->setSortingEnabled(true); - table->setColumnWidth(1,250); - table->setColumnWidth(2,250); - table->setColumnWidth(4,150); + QWidget* cmdPanel = new QWidget(this); + cmdPanel->setObjectName("commandWidget"); + QHBoxLayout* cmdLayout = new QHBoxLayout(cmdPanel); + cmdLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding)); + QWidget* spacerLine = new QWidget(this); + spacerLine->setFixedWidth(2); + spacerLine->setObjectName("verSpaceLine"); + cmdLayout->addWidget(spacerLine); + ADD_TOOL_BTN_TO_LAYOUT(Add, ":/icons/add.png", cmdLayout); + ADD_TOOL_BTN_TO_LAYOUT(Edit, ":/icons/details.png", cmdLayout); + ADD_TOOL_BTN_TO_LAYOUT(Delete, ":/icons/close_circle.png", cmdLayout); + btnAdd->setText(tr("Add")); + btnEdit->setText(tr("Edit")); + btnDelete->setText(tr("Delete")); + layout->addWidget(cmdPanel); + //index change + connect(table, &QTableView::clicked, [=](const QModelIndex& modelIndex) { + if (currentRow != modelIndex.row()) + { + currentRow = modelIndex.row(); + } + }); + //add new account + connect(btnAdd, &QToolButton::clicked, [=]() { + AccountFormDialog dialog(this, New); + dialog.setWindowModality(Qt::WindowModal); + dialog.setReferenceModel(model); + if (dialog.exec() == QDialog::Accepted) + { + table->selectRow(0); + } + }); + connect(btnEdit, &QToolButton::clicked, [=]() { + if (currentRow < 0)return; + QMap map; + auto record = model->record(currentRow); + for (int i = 0; i < model->columnCount(); i++) + { + map[record.fieldName(i)] = record.value(i); + } + auto mode = map["UserID"] == User::Current()->getUserID() ? Self : Admin; + AccountFormDialog dialog(this, mode); + dialog.setWindowModality(Qt::WindowModal); + if (mode == Admin)dialog.setAccountInformation(map); + if (dialog.exec() == QDialog::Accepted) + { + model->select(); + table->selectRow(currentRow); + } + }); + connect(btnDelete, &QToolButton::clicked, [=]() { + if (currentRow < 0)return; + QString id = model->data(model->index(currentRow, 1)).toString(); + if (User::Current()->getUserID() == id) + { + //尝试删除自己 + AlertDialog dialog(this); + dialog.setButtonMode(OkOnly); + dialog.setWindowModality(Qt::WindowModal); + dialog.setAlertMessage(tr("Can't delete current log in account!")); + dialog.exec(); + return; + } + AlertDialog dialog(this); + dialog.setWindowModality(Qt::WindowModal); + + dialog.setAlertMessage(QString(tr("Delete account with ID:\"%1\"!")).arg(id)); + if (dialog.exec() != QDialog::Accepted) return; + model->removeRow(currentRow); + model->select(); + table->selectRow(model->rowCount() > currentRow + 1 ? currentRow : currentRow - 1); + }); + + connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() { + + //model->setHeaderData(1, Qt::Horizontal, tr("ID")); + model->setHeaderData(2, Qt::Horizontal, tr("Name")); + model->setHeaderData(4, Qt::Horizontal, tr("Role")); + model->setHeaderData(5, Qt::Horizontal, tr("Comment")); + + btnAdd->setText(tr("Add")); + btnEdit->setText(tr("Edit")); + btnDelete->setText(tr("Delete")); + }); - QWidget* cmdPanel = new QWidget(this); - cmdPanel->setObjectName("commandWidget"); - QHBoxLayout* cmdLayout = new QHBoxLayout(cmdPanel); - cmdLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding)); - QWidget* spacerLine= new QWidget(this); - spacerLine->setFixedWidth(2); - spacerLine->setObjectName("verSpaceLine"); - cmdLayout->addWidget(spacerLine); - ADD_TOOL_BTN_TO_LAYOUT(Add,":/icons/add.png",cmdLayout); - ADD_TOOL_BTN_TO_LAYOUT(Edit,":/icons/details.png",cmdLayout); - ADD_TOOL_BTN_TO_LAYOUT(Delete,":/icons/close_circle.png",cmdLayout); - btnAdd->setText(tr("Add")); - btnEdit->setText(tr("Edit")); - btnDelete->setText(tr("Delete")); - layout->addWidget(cmdPanel); - //index change - connect(table,&QTableView::clicked,[=](const QModelIndex & modelIndex){ - if (currentRow!=modelIndex.row()) - { - currentRow=modelIndex.row(); - } - }); - //add new account - connect(btnAdd, &QToolButton::clicked,[=](){ - AccountFormDialog dialog(this,New); - dialog.setWindowModality(Qt::WindowModal); - dialog.setReferenceModel(model); - if (dialog.exec() == QDialog::Accepted) - { - table->selectRow(0); - } - }); - connect(btnEdit, &QToolButton::clicked,[=](){ - if (currentRow<0)return; - QMap map; - auto record = model->record(currentRow); - for (int i = 0; i < model->columnCount(); i++) - { - map[record.fieldName(i)] = record.value(i); - } - auto mode = map["UserID"] == User::Current()->getUserID()?Self:Admin; - AccountFormDialog dialog(this,mode); - dialog.setWindowModality(Qt::WindowModal); - if (mode == Admin)dialog.setAccountInformation(map); - if (dialog.exec() == QDialog::Accepted) - { - model->select(); - table->selectRow(currentRow); - } - }); - connect(btnDelete, &QToolButton::clicked,[=](){ - if (currentRow<0)return; - QString id = model->data(model->index(currentRow,1)).toString(); - if (User::Current()->getUserID() == id) - { - //尝试删除自己 - AlertDialog dialog(this); - dialog.setButtonMode(OkOnly); - dialog.setWindowModality(Qt::WindowModal); - dialog.setAlertMessage(tr("Can't delete current log in account!")); - dialog.exec(); - return; - } - AlertDialog dialog(this); - dialog.setWindowModality(Qt::WindowModal); - dialog.setAlertMessage(QString(tr("Delete account with ID:\"%1\"!")).arg(id)); - if(dialog.exec()!=QDialog::Accepted) return; - model->removeRow(currentRow); - model->select(); - table->selectRow(model->rowCount()>currentRow+1?currentRow:currentRow-1); - }); } AccountTableForm::~AccountTableForm() { diff --git a/src/AdminSettingForm.cpp b/src/AdminSettingForm.cpp index e5e1dbb..b426927 100644 --- a/src/AdminSettingForm.cpp +++ b/src/AdminSettingForm.cpp @@ -27,7 +27,8 @@ AdminSettingForm::AdminSettingForm(QWidget* parent, Qt::WindowFlags f) : TabForm QListWidget* widget = new QListWidget(this); widget->setFixedWidth(250); QStringList menus; - menus << tr("General") << tr("Account") << tr("System") << tr("Information") << tr("Log") << tr("About"); + //menus << tr("General") << tr("Account") << tr("System") << tr("Information") << tr("Log") << tr("About"); + menus << tr("General") << tr("Account") << tr("System") << tr("Information") << tr("About"); widget->addItems(menus); widget->setSpacing(3); for (int i = 0; i < menus.count(); ++i) { @@ -61,9 +62,8 @@ AdminSettingForm::AdminSettingForm(QWidget* parent, Qt::WindowFlags f) : TabForm Info->setText("info"); stackedWidget->addWidget(Info); - UserOperationLogForm* operationLogForm = new UserOperationLogForm(this); - - stackedWidget->addWidget(operationLogForm); + //UserOperationLogForm* operationLogForm = new UserOperationLogForm(this); + //stackedWidget->addWidget(operationLogForm); QLabel* about = new QLabel(this); about->setText(tr("About")); @@ -74,9 +74,8 @@ AdminSettingForm::AdminSettingForm(QWidget* parent, Qt::WindowFlags f) : TabForm }); connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() { QStringList menus2; - menus2 << tr("General") << tr("Account") << tr("System") << tr("Information") << tr("Log") << tr("About"); + menus2 << tr("General") << tr("Account") << tr("System") << tr("Information") << tr("About"); widget->clear(); - widget->addItems(menus2); for (int i = 0; i < menus.count(); ++i) { widget->item(i)->setTextAlignment(Qt::AlignCenter); diff --git a/src/ScanFormWidget.cpp b/src/ScanFormWidget.cpp index ac19f46..ad625bf 100644 --- a/src/ScanFormWidget.cpp +++ b/src/ScanFormWidget.cpp @@ -238,6 +238,20 @@ ScanFormWidget::ScanFormWidget(QWidget* parent) : TabFormWidget(parent) { connect(group, SIGNAL(buttonClicked(int)), this, SLOT(protocolChanged(int))); + connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() { + btnLeft->setText(tr("LEFT")); + btnRight->setText(tr("RIGHT")); + btnRefresh->setText(tr("Refresh")); + btnPreview->setText(tr("Preview")); + btnStop->setText(tr("Stop")); + btnScan->setText(tr("Scan")); + lbl_Protocol->setText(tr("Protocol")); + lblPreview->setText(tr("Preview Parameters")); + lblParams->setText(tr("Scan Parameters")); + }); + + + previewfunc = [=](bool val)->void { viewer->setVisible(val); btnPreview->setCheckable(val); diff --git a/src/SelectDialog.cpp b/src/SelectDialog.cpp index 867707c..04e98ed 100644 --- a/src/SelectDialog.cpp +++ b/src/SelectDialog.cpp @@ -6,12 +6,14 @@ #include "components/SlidePickerBox.h" #include #include -SelectDialog::SelectDialog(QWidget *parent, Qt::WindowFlags f) : GUIFormBaseDialog(parent, f) { - this->setFixedSize(360,380); - QVBoxLayout* layout = new QVBoxLayout(formWidget); - box = new SlidePickerBox(formWidget); - box->setObjectName("slider_one"); - layout->addWidget(box); +SelectDialog::SelectDialog(QWidget* parent, Qt::WindowFlags f) : GUIFormBaseDialog(parent, f) { + + this->setFixedSize(360, 380); + QVBoxLayout* layout = new QVBoxLayout(formWidget); + box = new SlidePickerBox(formWidget); + box->setObjectName("slider_one"); + layout->addWidget(box); + } SelectDialog::~SelectDialog() { @@ -19,17 +21,17 @@ SelectDialog::~SelectDialog() { } bool SelectDialog::updateReferenceData() { - return true; + return true; } void SelectDialog::setAvailableDates(QStringList dates) { - box->setItems(dates); + box->setItems(dates); } QString SelectDialog::getSelectedValue() { - return box->getSelectedValue(); + return box->getSelectedValue(); } -void SelectDialog::setSelectedValue(const QString & val) { - box->setSelectedValue(val); +void SelectDialog::setSelectedValue(const QString& val) { + box->setSelectedValue(val); } diff --git a/src/SelectFormWidget.cpp b/src/SelectFormWidget.cpp index b436099..07b6a45 100644 --- a/src/SelectFormWidget.cpp +++ b/src/SelectFormWidget.cpp @@ -95,6 +95,7 @@ SelectFormWidget::SelectFormWidget(QWidget* parent) : model->setHeaderData(3, Qt::Horizontal, tr("Birth Date")); model->setHeaderData(4, Qt::Horizontal, tr("Gender")); model->setHeaderData(5, Qt::Horizontal, tr("Add Date")); + model->setHeaderData(6, Qt::Horizontal, tr("Comment")); table->setModel((QAbstractItemModel*)model); table->hideColumn(0); table->hideColumn(7); @@ -255,8 +256,22 @@ SelectFormWidget::SelectFormWidget(QWidget* parent) : btnEdit->setEnabled(true); btnAdd->setEnabled(true); }); + connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() { + model->setHeaderData(1, Qt::Horizontal, "ID"); + model->setHeaderData(2, Qt::Horizontal, tr("Name")); + model->setHeaderData(3, Qt::Horizontal, tr("Birth Date")); + model->setHeaderData(4, Qt::Horizontal, tr("Gender")); + model->setHeaderData(5, Qt::Horizontal, tr("Add Date")); + model->setHeaderData(6, Qt::Horizontal, tr("Comment")); + btnAccount->setText(tr("Account")); + //btnWorklist->setText(tr("Worklist")); + btnAdd->setText(tr("Add")); + btnEdit->setText(tr("Edit")); + btnDelete->setText(tr("Delete")); + btnSelect->setText(tr("Select")); + }); } diff --git a/src/UserOperationLogForm.cpp b/src/UserOperationLogForm.cpp index a7fb598..e1d3daf 100644 --- a/src/UserOperationLogForm.cpp +++ b/src/UserOperationLogForm.cpp @@ -15,7 +15,7 @@ #include #include "SelectDialog.h" #include "mainwindow.h" - +#include "event/EventCenter.h" QString fileNameToDate(QString fileName) { return fileName.split("log/")[1].replace("-op.log", ""); @@ -29,7 +29,8 @@ UserOperationLogForm::UserOperationLogForm(QWidget* parent) { layout = new QVBoxLayout(this); QWidget* header = new QWidget(this); QHBoxLayout* headerLayout = new QHBoxLayout(header); - headerLayout->addWidget(new QLabel(tr("Log Date:"))); + QLabel* logdate = new QLabel(tr("Log Date:")); + headerLayout->addWidget(logdate); btn = new QPushButton(header); headerLayout->addWidget(btn, 0, Qt::AlignLeft); headerLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding)); @@ -60,6 +61,10 @@ UserOperationLogForm::UserOperationLogForm(QWidget* parent) { } }); + connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() { + logdate->setText(tr("Log Date:")); + }); + } UserOperationLogForm::~UserOperationLogForm() { diff --git a/src/device/networkmanager.cpp b/src/device/networkmanager.cpp index 5a4db6b..18bbc0a 100644 --- a/src/device/networkmanager.cpp +++ b/src/device/networkmanager.cpp @@ -32,8 +32,16 @@ // args << "-c" << cmd; // myProcess->start("/bin/sh", args); //} +host NetworkManager::getLocalHost() +{ + return JsonObject::Instance()->getServer(JsonObject::LOCAL); +} - +bool NetworkManager::setLocalHost(const host& h) +{ + JsonObject::Instance()->setServer(JsonObject::LOCAL, h); + return true; +} QString NetworkManager::interfaceName() { return JsonObject::Instance()->interfaceName(); @@ -67,7 +75,7 @@ bool NetworkManager::restart(QString& err_info) QProcess* myProcess = new QProcess; QString inface = JsonObject::Instance()->interfaceName(); QString pwd = JsonObject::Instance()->passWord(); - QString cmd = QString("echo %1 | sudo -S rcnetwork restart %2").arg(pwd).arg(inface); + QString cmd = QString("echo %1 | sudo -S rcnetwork restart %2").arg(pwd).arg(inface); QStringList args; args << "-c" << cmd; connect(myProcess, SIGNAL(finished(int)), myProcess, SLOT(deleteLater())); @@ -206,12 +214,12 @@ bool NetworkManager::setDefaultGateway(const QString& gw, QString& err_info) } -bool NetworkManager::checkPassWord(const QString &pwd,QString& err_info) +bool NetworkManager::checkPassWord(const QString& pwd, QString& err_info) { QProcess* myProcess = new QProcess; - //QString pwd = JsonObject::Instance()->passWord(); - QString cmd = QString("echo %1 | sudo -S -k whoami").arg(pwd); + //QString pwd = JsonObject::Instance()->passWord(); + QString cmd = QString("echo %1 | sudo -S -k whoami").arg(pwd); QStringList args; args << "-c" << cmd; connect(myProcess, SIGNAL(finished(int)), myProcess, SLOT(deleteLater())); diff --git a/src/device/networkmanager.h b/src/device/networkmanager.h index 2d19ec5..36d91e4 100644 --- a/src/device/networkmanager.h +++ b/src/device/networkmanager.h @@ -10,6 +10,8 @@ class NetworkManager : public QObject { Q_OBJECT public: + static host getLocalHost(); + static bool setLocalHost(const host& h); //static NetworkManager* Instance(); //static void qIfConfig(const localhost& lhost); static QString interfaceName(); @@ -20,7 +22,7 @@ public: static QList getIpRouteList(); //static void setInterfaceName(const QString& name); - static bool checkPassWord(const QString &pwd,QString& err_info); + static bool checkPassWord(const QString& pwd, QString& err_info); static bool restart(QString& err_info); static bool setJsonDHCP(bool enable); diff --git a/src/dicomcfgdialog.ui b/src/dicomcfgdialog.ui new file mode 100644 index 0000000..96a9e9e --- /dev/null +++ b/src/dicomcfgdialog.ui @@ -0,0 +1,319 @@ + + + dicomCfgDialog + + + + 0 + 0 + 600 + 400 + + + + + 0 + 0 + + + + Dialog + + + + +QTabBar::tab { +font-size:25px; +height:40px; +width:180px; +border: 0px; +border-top-left-radius: 0%; +border-top-right-radius: 0%; +border-bottom-left-radius:0%; +border-bottom-right-radius:0%; +background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #505050, stop: 1.0 #333333); +} + +QTabBar::tab:selected, QTabBar::tab:hover { +background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #ABABAB, stop: 1.0 #CDCDCD); +} + + + + + + + + + DICOM Settings + + + Qt::AlignCenter + + + + + + + 2 + + + + Worklist + + + + + + + 165 + 0 + + + + Name + + + + + + + + + + + + + IP + + + + + + + + + + AE + + + + + + + + + + Port + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + PACS + + + + + + IP + + + + + + + Port + + + + + + + + + + AE + + + + + + + + + + + 165 + 0 + + + + Name + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + 3D Recon + + + + + + + + + + + + + + + IP + + + + + + + Port + + + + + + + + + + AE + + + + + + + + 165 + 0 + + + + Name + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Apply|QDialogButtonBox::Cancel + + + + + + + + + + + + btn_group + accepted() + dicomCfgDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + btn_group + rejected() + dicomCfgDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/editpatientform.cpp b/src/editpatientform.cpp index fd1dd9d..c78a314 100644 --- a/src/editpatientform.cpp +++ b/src/editpatientform.cpp @@ -6,137 +6,151 @@ #include #include "guimacros.h" #include -EditPatientForm::EditPatientForm(QWidget *parent) : - QWidget(parent), - ui(new Ui::EditPatientForm) +#include "event/EventCenter.h" + +EditPatientForm::EditPatientForm(QWidget* parent) : + QWidget(parent), + ui(new Ui::EditPatientForm) { - ui->setupUi(this); - ui->lbl_Sex->setText(tr("Gender")); - QHBoxLayout* sexlayout =new QHBoxLayout(ui->sexpanelwidget); - sexlayout->setMargin(6); - ADD_TOOL_SIZE_BTN_TO_LAYOUT(F,":/icons/female_d.png",30, sexlayout); - ADD_TOOL_SIZE_BTN_TO_LAYOUT(M,":/icons/male_d.png", 30,sexlayout); - btnF->setText(tr("Female")); - btnM->setText(tr("Male")); + ui->setupUi(this); + //ui->lbl_Sex->setText(tr("Gender")); + QHBoxLayout* sexlayout = new QHBoxLayout(ui->sexpanelwidget); + sexlayout->setMargin(6); + ADD_TOOL_SIZE_BTN_TO_LAYOUT(F, ":/icons/female_d.png", 30, sexlayout); + ADD_TOOL_SIZE_BTN_TO_LAYOUT(M, ":/icons/male_d.png", 30, sexlayout); + btnF->setText(tr("Female")); + btnM->setText(tr("Male")); + + // btnFemale->setToolButtonStyle(Qt::ToolButtonIconOnly); + // btnMale->setToolButtonStyle(Qt::ToolButtonIconOnly); + + btnF->setObjectName("sexBtn"); + btnM->setObjectName("sexBtn"); + //btnF->setText("Female"); + //btnM->setText("Male"); + ui->sexpanelwidget->setEnabled(editEnable); + btnF->setEnabled(editEnable); + btnM->setEnabled(editEnable); + btnF->setCheckable(true); + btnM->setCheckable(true); + QButtonGroup* group = new QButtonGroup(this); + group->addButton(btnF); + group->addButton(btnM); + btnF->setChecked(true); + btnFemale = btnF; + btnMale = btnM; + QHBoxLayout* layout = new QHBoxLayout(this->ui->editcmdWidget); + + ADD_TOOL_BTN(Cancel, ":/icons/close_circle.png"); + ADD_TOOL_BTN(Accpet, ":/icons/selected.png"); + btnCancel->setText(tr("Cancel")); + btnAccpet->setText(tr("Accept")); + btnCancel->setEnabled(editEnable); + btnCancel->setToolButtonStyle(Qt::ToolButtonIconOnly); + btnCancel->setIcon(QIcon(editEnable ? ":/icons/close_circle.png" : ":/icons/close_circle_d.png")); + btnAccpet->setEnabled(editEnable); + btnAccpet->setToolButtonStyle(Qt::ToolButtonIconOnly); + btnAccpet->setIcon(QIcon(editEnable ? ":/icons/selected.png" : ":/icons/selected_d.png")); + btnEditAccept = btnAccpet; + btnEditCancel = btnCancel; + connect(btnEditCancel, &QToolButton::clicked, [=]() { + clearPatientInformation(); + this->setEditEnable(false); + restorePatientInformation(); + emit editCancel(); + }); + connect(btnEditAccept, &QToolButton::clicked, [=]() { + if (ui->tbx_ID->text().isEmpty())return; + if (ui->tbx_Name->text().isEmpty())return; + storePatientInformation(); + bool result = true; + emit editAccept(getPatientInformation(), result); + if (result) this->setEditEnable(false); + }); + ui->tbx_Dob->setDisplayFormat("yyyy/MM/dd"); + + connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() { + + ui->retranslateUi(this); + btnF->setText(tr("Female")); + btnM->setText(tr("Male")); + btnCancel->setText(tr("Cancel")); + btnAccpet->setText(tr("Accept")); + }); + -// btnFemale->setToolButtonStyle(Qt::ToolButtonIconOnly); -// btnMale->setToolButtonStyle(Qt::ToolButtonIconOnly); - btnF->setObjectName("sexBtn"); - btnM->setObjectName("sexBtn"); - btnF->setText("Female"); - btnM->setText("Male"); - ui->sexpanelwidget->setEnabled(editEnable); - btnF->setEnabled(editEnable); - btnM->setEnabled(editEnable); - btnF->setCheckable(true); - btnM->setCheckable(true); - QButtonGroup* group= new QButtonGroup(this); - group->addButton(btnF); - group->addButton(btnM); - btnF->setChecked(true); - btnFemale=btnF; - btnMale=btnM; - QHBoxLayout* layout =new QHBoxLayout(this->ui->editcmdWidget); - - ADD_TOOL_BTN(Cancel,":/icons/close_circle.png"); - ADD_TOOL_BTN(Accpet,":/icons/selected.png"); - btnCancel->setText(tr("Cancel")); - btnAccpet->setText(tr("Accept")); - btnCancel->setEnabled(editEnable); - btnCancel->setToolButtonStyle(Qt::ToolButtonIconOnly); - btnCancel->setIcon(QIcon(editEnable?":/icons/close_circle.png":":/icons/close_circle_d.png")); - btnAccpet->setEnabled(editEnable); - btnAccpet->setToolButtonStyle(Qt::ToolButtonIconOnly); - btnAccpet->setIcon(QIcon(editEnable?":/icons/selected.png":":/icons/selected_d.png")); - btnEditAccept = btnAccpet; - btnEditCancel = btnCancel; - connect(btnEditCancel,&QToolButton::clicked,[=](){ - clearPatientInformation(); - this->setEditEnable(false); - restorePatientInformation(); - emit editCancel(); - }); - connect(btnEditAccept,&QToolButton::clicked,[=](){ - if (ui->tbx_ID->text().isEmpty())return; - if (ui->tbx_Name->text().isEmpty())return; - storePatientInformation(); - bool result = true; - emit editAccept(getPatientInformation(), result); - if (result) this->setEditEnable(false); - }); - ui->tbx_Dob->setDisplayFormat("yyyy/MM/dd"); } EditPatientForm::~EditPatientForm() { - delete ui; + delete ui; } -void EditPatientForm::setPatientInformation(PatientInformation *information) { - if (information) - { - ui->tbx_ID->setText(information->ID); - ui->tbx_Dob->setDate(QDate::fromString(information->BirthDate,"yyyy-MM-dd")); - ui->tbx_Name->setText(information->Name); - ui->rtbx_Comment->setText(information->Comment); - btnFemale->setChecked(information->Sex=="F"); - btnMale->setChecked(information->Sex!="F"); - currentPatientUID = information->PatientUID; - AddDate = information->AddDate; - storePatientInformation(); - } +void EditPatientForm::setPatientInformation(PatientInformation* information) { + if (information) + { + ui->tbx_ID->setText(information->ID); + ui->tbx_Dob->setDate(QDate::fromString(information->BirthDate, "yyyy-MM-dd")); + ui->tbx_Name->setText(information->Name); + ui->rtbx_Comment->setText(information->Comment); + btnFemale->setChecked(information->Sex == "F"); + btnMale->setChecked(information->Sex != "F"); + currentPatientUID = information->PatientUID; + AddDate = information->AddDate; + storePatientInformation(); + } } void EditPatientForm::clearPatientInformation() { - ui->tbx_ID->setText(""); - ui->tbx_Dob->setDate(QDate::currentDate()); - ui->tbx_Name->setText(""); - btnFemale->setChecked(true); - btnMale->setChecked(false); - ui->rtbx_Comment->setText(""); - currentPatientUID = ""; - AddDate = ""; + ui->tbx_ID->setText(""); + ui->tbx_Dob->setDate(QDate::currentDate()); + ui->tbx_Name->setText(""); + btnFemale->setChecked(true); + btnMale->setChecked(false); + ui->rtbx_Comment->setText(""); + currentPatientUID = ""; + AddDate = ""; } void EditPatientForm::setEditEnable(bool enable) { - ui->tbx_ID->setEnabled(enable); - ui->tbx_Dob->setEnabled(enable); - ui->tbx_Name->setEnabled(enable); - ui->sexpanelwidget->setEnabled(enable); - btnFemale->setEnabled(enable); - btnFemale->setIcon(QIcon(enable?":/icons/female.png":":/icons/female_d.png")); - btnMale->setEnabled(enable); - btnMale->setIcon(QIcon(enable?":/icons/male.png":":/icons/male_d.png")); - ui->rtbx_Comment->setEnabled(enable); - btnEditAccept->setEnabled(enable); - btnEditCancel->setEnabled(enable); - btnEditCancel->setIcon(QIcon(enable?":/icons/close_circle.png":":/icons/close_circle_d.png")); - btnEditAccept->setIcon(QIcon(enable?":/icons/selected.png":":/icons/selected_d.png")); - editEnable = enable; -// ui->->setEnabled(enable); + ui->tbx_ID->setEnabled(enable); + ui->tbx_Dob->setEnabled(enable); + ui->tbx_Name->setEnabled(enable); + ui->sexpanelwidget->setEnabled(enable); + btnFemale->setEnabled(enable); + btnFemale->setIcon(QIcon(enable ? ":/icons/female.png" : ":/icons/female_d.png")); + btnMale->setEnabled(enable); + btnMale->setIcon(QIcon(enable ? ":/icons/male.png" : ":/icons/male_d.png")); + ui->rtbx_Comment->setEnabled(enable); + btnEditAccept->setEnabled(enable); + btnEditCancel->setEnabled(enable); + btnEditCancel->setIcon(QIcon(enable ? ":/icons/close_circle.png" : ":/icons/close_circle_d.png")); + btnEditAccept->setIcon(QIcon(enable ? ":/icons/selected.png" : ":/icons/selected_d.png")); + editEnable = enable; + // ui->->setEnabled(enable); } void EditPatientForm::storePatientInformation() { - store.PatientUID =currentPatientUID; - store.AddDate = AddDate; - store.ID = ui->tbx_ID->text(); - store.BirthDate = ui->tbx_Dob->date().toString("yyyy-MM-dd"); - store.Name = ui->tbx_Name->text(); - store.Sex = btnFemale->isChecked()?"F":"M"; - store.Comment = ui->rtbx_Comment->toPlainText(); - qDebug()<tbx_ID->text(); + store.BirthDate = ui->tbx_Dob->date().toString("yyyy-MM-dd"); + store.Name = ui->tbx_Name->text(); + store.Sex = btnFemale->isChecked() ? "F" : "M"; + store.Comment = ui->rtbx_Comment->toPlainText(); + qDebug() << store.PatientUID << "," << store.ID << "," << store.BirthDate << "," << store.Name << "," << store.Sex; } void EditPatientForm::restorePatientInformation() { - currentPatientUID = store.PatientUID; - AddDate = store.AddDate; - ui->tbx_ID->setText(store.ID); - ui->tbx_Dob->setDate(QDate::fromString(store.BirthDate,"yyyy-MM-dd")); - ui->tbx_Name->setText(store.Name); - ui->rtbx_Comment->setText(store.Comment); - btnFemale->setChecked(store.Sex=="F"); - btnMale->setChecked(store.Sex!="F"); -// ui->cb_Sex->setCurrentText(store.Sex=="F"?"Female":(store.Name=="M"?"Male":"Other")); + currentPatientUID = store.PatientUID; + AddDate = store.AddDate; + ui->tbx_ID->setText(store.ID); + ui->tbx_Dob->setDate(QDate::fromString(store.BirthDate, "yyyy-MM-dd")); + ui->tbx_Name->setText(store.Name); + ui->rtbx_Comment->setText(store.Comment); + btnFemale->setChecked(store.Sex == "F"); + btnMale->setChecked(store.Sex != "F"); + // ui->cb_Sex->setCurrentText(store.Sex=="F"?"Female":(store.Name=="M"?"Male":"Other")); } diff --git a/src/generalform.cpp b/src/generalform.cpp index bdb154c..4036242 100644 --- a/src/generalform.cpp +++ b/src/generalform.cpp @@ -50,12 +50,15 @@ GeneralForm::GeneralForm(QWidget* parent) : QWidget(parent) layout->addWidget(lockHeader); QHBoxLayout* lockHeaderLayout = new QHBoxLayout(lockHeader); - QLabel* lbl_lock = new QLabel(tr("Lock Screen Timeout")); + QLabel* lbl_lock = new QLabel(tr("Lock Screen")); lockHeaderLayout->addWidget(lbl_lock); QLineEdit* lockTime = new QLineEdit(lockHeader); lockTime->setMaximumSize(QSize(300, 32768)); lockHeaderLayout->addWidget(lockTime); + + QLabel* ss = new QLabel(tr("s")); + lockHeaderLayout->addWidget(ss); lockHeaderLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding)); //... @@ -108,6 +111,6 @@ GeneralForm::GeneralForm(QWidget* parent) : QWidget(parent) lbl_lan->setText(tr("Language")); lbl_ins->setText(tr("Institution Addr")); lbl_insaddr->setText(tr("Institution Addr")); - lbl_lock->setText(tr("Lock Screen Timeout")); + lbl_lock->setText(tr("Lock Screen")); }); } diff --git a/src/icons/dicomsettings.png b/src/icons/dicomsettings.png new file mode 100644 index 0000000000000000000000000000000000000000..3e15f7987991664adf7d423d25518d610082d9c1 GIT binary patch literal 4902 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 buxZ+`y~sW$vzP-mt{~RtcEn1v3%C9YGvL&i literal 0 HcmV?d00001 diff --git a/src/icons/networksettings.png b/src/icons/networksettings.png new file mode 100644 index 0000000000000000000000000000000000000000..616a5f15fcd096b0316453b5b9b70c3c351d116b GIT binary patch literal 14283 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 HA4UBip&I-u literal 0 HcmV?d00001 diff --git a/src/icons/networksettings_d.png b/src/icons/networksettings_d.png new file mode 100644 index 0000000000000000000000000000000000000000..ae39c64d098ad88600dec0751e3e6450cfe97a38 GIT binary patch literal 13760 zcmXYYbzD>L`}Y}L0s~Y+6h?Q94gnoC1Y{^3Qlmk->NhBuDF6Vtp{apDfuH^VUSuTTdxcSD9{2(A zLa9FhDu?fE000}HiBNgsZ?PRhp2?}2b{%9qAu8GuOS%-%6ydo+0gD)X`w{l4$J@?! zocE0=e|%#^IU6QsIWESZkT8}sqJdSUW!8h?8>^~8D)DVYY9H0M=TKH^71CDz#p@u~ zqYLL!j=fTR`DVfL`B^s2rYi1r#_3Sg!nxv0E52_8acVX^Bl}0s*5(yQW+A}c0sJg{ ze;Csw1i0J)Od(x#z=sjPcnmwBfWy;3x-20}5a2`-n1cXeR%_>qBdu{*_t_?opRQYz z74*$keA5I*p67(q7cn;l8WyZy3;ELYJokeTz=k0NP`?D=@#iLYb)0M$5PmT~<09pr zjm4ho-^^7qJ7Xl^{G4J@ZT;CsT}>^I7fa`(v5Lyr)wsJPQ9`^nHQxB6IE2a zthL}1C%dGESO>%u78c5X+d8z5v^sG?1PcQSK~SaN0bLhlK&WkOvlTR<*mL3)5dCPu zK_YK0V1XA9Bn@AGa>dENnTQSJfK$PkE9xOY<%ccR=`TIZY(Ibglph`*j)xThKl@cr ziCXo~*6}Vxf{23`J6X*585;TU*n|Z438#9s9?=}qUXIehIy@Cdh7w?hyGJ`nUN08V zSC-~~@gwH7Vq~_7&B?hz2|T%^4MZQXksT3+({nsic$>>?j%tKt9cp1=@hLCvrwDWRiq>GS~EP}8{ zRDlU{={mN;ZE3Phwu)F zY}hKRB)P?=LffBI4*Wc!5DKjVdiLA2czAf+eGjv5vh8p47T@JygM?>5y7HdJQ9{Fb zl}jd^GJGQ1`B?)eM!F!jE-t^xASA$@@kqU0o3&l`Wp+>cyn@^y>?u7#yu{XV8-Sg% zSshH%+UdN$%7E_+K$bT64hYeCD!6UPvulYxYHT*t<1TNF_ni}QQQ&XL^(p2=4M?Of zF(Za{QUl`{e|yHLaYyE8sfJzg-U~nGfTWFEZ2On7@$vU-49aqe0e9_jY4}jb`Z?wU z;s)?tOuJo&NtQo7;ZuKqe-Jk}w@JW^k)Y2lMdjYUzI%%D@6Nk6-ElwHy!QanYXuZ z-bj>slM{ux_h{@M5YJT*eHv(EV-r+oBD5M{(S;wuTWclRtt9|mL9t>rq%0q5cp+n8 zsV)cP1&a~0l~BU3DWD>b^(JNS-@o5=s*<^XzeBrrx{dpD(&l>fucB|cCPYI781Ld# zC!p&#>UXXb;Xqp!vV z_%c_^=D&ac3T1s+;{^J1U(~WK+t*E2efe7TwC+*3#w*Wtj%-gLQ9Hn_I)c;bp;#@z zwUxKiO~xxuFLGAn0KjhB1JA)zr}SbXECN$zZ*MPx#bT2fDV_C@1D+fk-?l0coI@Fv zTGIfOm_~Lb@vO#fC^Q};&l7(Ct4WI1yHSTbQ5caSe>36AlXZs*J8si&c6tEr`0^>{ zcq@{D62>8EUf?V7og|x#v8x zAD@$xlWII^yizl^-)5-lCtC986aF3x6O*is*kbO1q_XYCxKsW8ZhV#QAp++|^7mnF zZS8t7`5hFpof^2$G$jSUH`9@%Tc)04mIgo-Q&FBo?S8R3TbN&wj=i^tK8fK4NjXL| zIA{RReDA2qvzFAo5U$Bau!_SL9VQcpS|sc!pd;fZmf31eqYiCf_uJ|{YB1lwn!InJ z(HviIdo%&aZhk0im~$$ta7+7WnUUv7XBT^VEb%iDGnkZ=1m}2z%R5osR;2xJW!!OQ zmj~NHgxNh8;CPO4R&_~QO~o@Kyd9H&U+f}F6rmojbCiTYRsR@zrbD&TDO@8TtghB5 zD_+aLO+9gsY|=yCh9h$L_2a|p&79~)^YsUh&B}KHI-*anu(A`ymg%eC+KNAG|Li#5 zNx}YHwC;Fk&uDZ1$>jJ3u`=vgOyei%nE{wwuYbObD%zZyuh@bW!WGA{8aL{)S5foZ z)V4K*kk$i7uXGQsvoF~)vEQb@KexnRyn@>LBBs`si7~k8xH8-jNK8A*K^9>swr_9K zd&~+O^hC)_rS6{VCUaG~1fXVw$6eBDzI1;+BVa?8%mYhWz(@BOs1qW%cG85`Lp-fN zNw4EgrKf)Fw1VIl5+(gU*6wy94WeXS&O5<5nuvS-@ZP3spN2ks@$k2RgWd9RuW-aM zi|0B29hBy32;!iDlYMq~J;y8FZ(Lh?AZcBt^2~}+I6o_k?$u|MRuu%6eZ-}e-v6rG z2Y_X7t~*w^<83f(WGl&f=oB8Vi441%$+K9_W{b-O{czsml{FK$U>iy}<9+M zKuf40vYilESUodWFpm=(Ufe%&E}L==$LNgmy$xTfj<1G7i39p_JqCREpzSbsOS{P} zCS_QD{zx(7oFrawsbAZWp6F98))<{2CE-8yOV{SiOkB|yvc0fh`6oWxO`Ng@~; zEj8;5qqs7-3#xG>0=IsVE2pB~6LhKT#~$vXYn%CpwK-K;_F%z61^dQq@faG|@~4!P z6eXQ;1E}~V0WFgjEs@7L^lxBjp4eK(e5`znS*qfi#sm39wt~Wzjj~@YX@m$qu1|`) zx?+hVbfeCw{?9R-xif6b@^zETKc5pN)sSPm3NSfEP2P>;el0_S0yDQ;Q&U@qFG`PYZt{d9 zv?>euhp9aIubduXsLTMtFn(^fjwhe+N_an|U2-pXDpkmr9(;Em*9yasa;FNrc z8OA7~@Aootxb38+hZ16_7LG6LF~9cuvcN}zZ?xPAIT+PtWMYCQw|v(h;-}GGCV5J( zT#)$nTBD|NJzxlIZ}=_lL&@fQ020;89z zUN1$&(h-s2y^YO7#6d~H8Gc-61Bl*{y@G4XiWxAgB^LRvg&l`nAMjp$GguwTTW3vO zS!D)+o3qh)%5Le4oaShLW;ufH4?$p1_s`>L-_bCQ?xR$_2H)?DuB5 z-MnYrTDNcAHup|Sthk8+XI7)DRCdkrM>mC_YBBeFMx6wlF$0}j#0Z(Y^?#1T8Kdp(?_Jkdg=`-?-qhj9c+TgqUOPQk z<>Hqtqj-Lkt-y%HE|XQ-VYs(R&5+Ncs`FWCnEM2~ZcRY@b>Abiqy=(E~A87dAMR-D@szm6Vcd z$S8^@1hAjYiW6TC)wSHFNc<&Zm~LQ@|K6dLp|ce4^3sun!4DdZQCj$D)pNBqRptK9 zvFs5xloS&?e|$N`Rv>^lVur+EZsp6W8+oCb|^IB7=Zc-9z;1q?69MOKxvS$nBNGpImLb(7^hW|9W{r%P9?P}u8(>@Lk4)sTm9?hAriBdqo z@z6~!(Dt-PyiPgo)~_rQDb4B1e=vgjk3v;>iInE`k6jusO3{6mSh4Ck^nB(A=Wrqw zWxQZBca)vOf89c~Dd!#?RhAsfDkfW~rtnq*jTnrCm0YS;UiS@YmygVpMgA&fdYl~@ zl$c+s;tT^f5_!$T1uMi?*LZDcd!%07;(Y-#D9>U6yZ12=o?^vG)iW~bRIk+|YG$(b z6P(^MQxzeMQTfUU@~<0>HN5cw>v2(-peBOSmycgyEh8{AX^tzRRO(LkSqfUt2y5du zf@VNmO6mwNN@aKS+??zRwcJ)e8OA&AFxG(D3<92iEY5$2i*TrL7cqTRzAX~DD} z-S06gcYY7`yilb`Y|7a8LOl7*nt3~fmd0CQ-x4GigsHkj}so^WRyw=f0@$F z%}`!vF%X}8CZjD*#T}Z$PY1=FeSLi!>z$_-^i$)^wuw|e=3pa>d!JJLfPb%R!^^#S z$@?*`!eDD@W5aREP|?}1daq;G@)c%elYwsPmnfBAc3xgb?N@3_Cl@gSPLpBepX{^) z7N});eR`Ve1_*j|*$dz|^ALQ#J%y9^!ymylC~6x0=tf($8fgIp#8}DW;P56aQ152o z%7zV;5TVf-c`<8nUlmb8&$?PY8=R|FSe>#SP;>098f#HhpYCF0o>2}!*F^>L%W#73 zjq|>wx0&Qvq+8g?bgb6)S;ZA8M<4AYZV4!>sjK@{O*mCPaaCe3Xc9DVe3W9sjU4iO zTlPS&R>KJ#hcDkt#>4t}3I^Nk(oo$S&O=CnPZF&MUdid7DQE+jLKd&1{Kw=h@bl5X z)=L)mgo$kyAkA-tZEp<_&`weE4dNXtYTr=~yXJv7v;xGTAT6?XTycWQDfs=o`NRwl zXv#QkXAMceK25nlql$->0Lc*tuEfyKxq`M#eg!T$Rt0zF-F01xUJ<-zVvAGzx#V!! z*%g7mu(QFxE|aK0IVl1PBa`;fS`Gexk1L9o`%`L9BlZ%7>{irmU@9)Xb8o(l2>fo+ zr^{_$ zNC?o{TR_pmIcCBGcufTRJRVjJFtM`EzcnbErvR>39@p$mbNuk%ZAW#4KWZzpqUnXPzOauxjLcfA3PzTt==v$w=EBjP)Q$Ls|!cF&Wm=2ad1D50wqLl|NVYLg#$ z&IKSK641~OMwg|&QX0Xpd@5NZtJ@%XC2n*54+jNwU`ne1(7_1pTq z;nI}-NaUZ?_GnCAUVSZWB@I>i2e*acjV5X)yV>GqqYNx_z+_|p(!r8lP-(Y{zo`OC zgHb+A&~}Bg2Oa=;nToAb3ohws!V1p8Q4_75o(>U0fz@ zdWFwHkZ#$;j8|abS*2j0EXc`{3*~Mfu8c?b`y{6pUq7lLXF16G7-r9`%&9;IM5nhd zFSr$wZ?953G~27VZ-qH=s;D0i8#)rK0HXJsMFi@^zP!HGs3IZ<(Pa+V8>FID&KWMF zxqq_6QQ5LtO1eM8>)tLiOQ5_a*kTZln-2k$M+lNqQI$8&uA!q!>yl0rha|-R2$sn4 zUF!3+?uGn=@@0b7BDcv@7D@ni%1-DcpGYI+~YnSDkP7Ey_t3X!<;Qf<+ws zhmsS1I|?D_ACHt=gd~bE+UN*=3XawW0XV0YPTegA^wm4DwSJr$3^Gf#XN6GsGN~-W z3JF=f_Yk4Efo3^)+spWO(~QCHF#zk0m-X#T$53y6CN%yh!fYL$UC(&hi0@wxr3=m8 zujpJL08fvZbkQ+5t8)X>atDqtYoUM5vOk$tOvYa_hq;aWbpd;D^}B<4JCtdtWSt9M zQf2+!1S!J)lamvA@MKr9T5eRa*rXpXzh(j;yD-CdmSq?KT_DYvz5ACoLugb-qI z5aY$yV2OF7(Q8$jN4!6en`oTUL;BHR2XChWgnf8}rJ$daeAC2+wO#p(Z7W)rjx6>N z;5GQBkWW9n?j@ySyGIOc5xX)*1!-$*N1v;&at->TwLhlV-5VoM6d~v$kH75uPhVd@ zdAx;3m5)p8uBnOKt}{uBilsGIkyBaf`#0m0NWQ-^3zIdQO^b}R+F7@o>DfAcIFmYG zWA0|W`y_4~!S+288|LU7B=+*V@1~*#Tq9Ngk7@jRC^K|`YCNSNRlJ+lZfkD8&0beW z=SozwS{r=)O97zi-9s46N^(O}4@n*rov8L5X{mofbw)+k=uR9y*i_@aPR zq}|yIaODo!KyspG8>)d~=*j6V;3Uz8Bp@Cnoq251_U~Uvyugr0u${2LXBpArt-dP~ zCG{rV^Tzx;Yrf%T7|f)WGCH(IthWWn=c!!T5WJ{#4{9!aBVpT~x?Ck+#Wq+hzCwu$ zmeJ#Uvnu}A+OkMfE+#Lv2ysp~bn{OAf0(-|-yUN-1&Yf#A()dllYx4ye`9hHsd`z}4fUXv&!NfL3iCotS-R-53-SO@mdvl`0W?-~}SWMJCos zn!XQ6zGySku9Yu%#rFA;a~vrx+wjBG8c))9^&y3${^0keXIIAOK8!#>CG8>hR6btK z0v&6dV(?acB^4D`z54DUPSV7=`O@-<-B*Ba{YaR|s~w~39>#7)o#yxfwQiqi$hPd% zXX+~o4e2y=Um8pk$e8n63<>i(uyl}mTiPq*05Gwz1X(dgRT}*nkN(wG>f*em&UdJ< zF13dHx+EKpvnyA{v6gD|Ziqii6;zGibSYl%9ob(Zy#e-+-+lOHVmE=}RZ(5%^URd; zSD1d^u-cN1fN+iBPe0}4f4{Q%22Pa_aH_;zwp?hPC(f+?ThAaP;6sjM^*$Ci-D**_ zD=sGXW93g4DMld8v)K5Bi-_smRsVk5D#!|#k2^mMzJaX#>7lV~@!l9Cy+iYMJ$S%_ z#~2@+DW>KrVlt$lT>ga5crIcn@L?Lt^P2sbtzm5ZQg1wTYFH>?J_VY4}!aJfcm4-wRy0&8gMi#2A2>vvdv#Nk2MM@uh`;>H{IZ zt!}*IlD3MzQT+jq9wbC1P)gd2#S5-pM(2X8Qj5B#jnVzKc95(Id{NcIHIYI=aH&KX z{-t6C4WrZjo0nEyUESU-T1UqUTi&Xh%-12n+$o&#-Cw6qD!SS>2Dt$j#zEB|91%8w zfhN`kx1TaS4%g5*Bc8LxoOGHvJDWt5-ZgpPyU<8CN}3B8*E>!0&-*Q2`t_atzGH)L zEoH`3+$&C{rM6uD>TYinTSRF3#7-Gvedr5>FVc zF^RNq+yyFm>FB{Mhn*4_=Y7;kC;l z<83i^@)>_Ex3 zJa4kKodef+P+I?=)bR7?4=Dj==)nUSOS`mt}M(c*VHe(VvLPU!m@`kx~ z&2+242D@^LxaHcQ`n`~Yc#y1gdOeA?yOHbXcTY|LEfsV{@i2U)(L67!V|O*S=CGJ~?5e2V^FPmr;S3IV25n-MKP2d@Ce;HHSdHF{8yzcMU$N-(Q5g7V*U^=u zJ99>Tbb2mrN6tF&JPv zsTHMqzuUUov0HB0Y2k^wWdh4vcrU)MpBZ57;v+ zY6E~Pp|jap>-agmw3t@DF*;8T=N^#P80zV{*FbmoVJY{k4H^`-#ON(ZM*aPR@)~2X zT#&UR%|hLtWH;xBe5-?+<9wm4a7%P-Gp}YwLD)U+uY5BFd^1~y;dPLnte6o=3G|hv z%_HtLI#BIa$GN`~HEiv_fe+S8Q)YViZ0O`=4DGIT_zJOFt5D`?WG~}w!Zm{0(~j!^ zM6jbykO4{R6HSHeFKfbZI9w-UG3Ui2bJt89yuL)7JU$^osdB=p{WTW;g)v?SWe;x}LY5Rl zp7pYa(Lu?1#tZn`Ev!K*$PMqT;(Q?sN5;j+yIGb^;C3CW=+3Ta5DJA3m1|!rr_GxI z$dV3hruwByv6DDign8z4*8BE*p1kjv5!sKc06H&?#3JPF+Y{7 zJF6{z`n=%BVz# z_`0#D*?*Y)F%wJYTHTB{URZ@A(SA_6XZp`m2%c{nTP-{?u5e6T*@5I6z;Q4I$PN7? z591(tupE~#tBc(|x93=HZt(qwAjikYA9Qx|BA@=BtaB1AsAjc>HK{l%85kJAX|;jO z)E;fW87_E9(De`cO8ERw{A_hC`6P7cZnZ|g??&SS1c(4RcKQ-jJ*yzTQyd`wb$*rk z`fcmfz~;EZH(xA2P>_1&2lOY0o?4(oGsL*Z#pTXQEi)%bw)gNCCN_BcnmTsl!fsK8 z+tAM*;w2aVVJ(?6UVokFA_(VPY3oSDSmYLIGl7`shzKY<=7Q&sRv0=m$+gZ1vVdc| zEf>2=nO(|OK;HAXi@lj2p20?D!4R;5p61X{^8Ce7L~h{rOCrXWvFy%Xjxs_{yLDfj z5)l7CPlti0rq6`=>|wjbqL;Pxa))3p1J~BF)B~JmMg0neF+=gAaKx!a=nsuo4PE!~ z!Rcaam#U1yJ$K(eHcV=g2x0w+q)ObZdm%aZn2(Dom$P;}B02ToBiX~&na9Y1+v`l} zi$Qsxd54;Yh&0T`#;I9NF();Zom{MGVTUWKN-^~-mc2*KC$%eJeG z*;sn}S4Fh5bpTY_-r30vohQ+Iu;RRZeg&%Yk%Ue1b@ym)*`0{b@X@n*xHiVE`i;IC zR_!zH{ix+WetgNJse@~Z2NkM6c6`O08g|lJ_O+O%SCeN)W9oCGDzrpZc5Aw_XNS=a zrB1nf2Zr4L{JMYI=iai?L@^7zZ;fOG{w}nHK4Y8?2z`KPcq8)uOh=8hI5j7{UlUW& zhQ$n5&F~^i)`6}txwDXa(DsV|e<4IZZ{3r4$9ub9cRQmU@)cT+gL2u(LfN0(r%Xp; z)XdCl-revc;QYiToBpR!kVB3A&7_eX`N%gDEq{l_j2Z}x1hYeNe^ZGK5e7SU*WBMebtK*Oo z0yb-+#bfsbsXbPmviqKR`F=UWHHnJO*NqT{I#3Gv_Amcbo-YD zu+TH2OTbsSGj# zPHqpXgPDh|8ne>OafAvZrc2VdqJAWSrzhGCE^JPx|DC^>^RXsD`ad!mA-0Btk!F1} zn0uJPVpUO(bSj+cJccS;JmrEs!20@y$Y4)xZDQxPR{0%)}HyFov|y=ox^(v8)E zMWBlO8C?A3-$a0cWwy*o1-kVG7bz}5mAsLQ{3jVV_U0_xEjq2h+TW>jeV4Q!axHdnS0$FhCO9z2PAo;Kb)P8uFrBrX5%onzpWb%k5akRyT!|pTKS*Tt}+NjP`K=a4u z-E0<)?eB%pw@;Vet-mX8)LDK6EN#MezFF@mg=!)KUf`~hlzB=xPg^)wjWnE;wm>Tl z0JvEXQLWnc+l{=Z6cD;&_M{(ors4{pLA_N9h+q~BQE&g4uf`k2c}c3^l%2PcZ|KjB z^dX#Csw=)nw5HBat1d$pEu%0s_?onOgzY^1=3#{2tjFoBH>gAEz#xvl$?2RfSH8j>_r zY6(?#L*SZb_wpCKMikF&<7U&xVTcQ}+tu5e=yn0QxHg#P$9=!zR5P+2_p*#*Wj;ye zBK;}V*o$7g_)|3N_~VWq0^{5bL6K-sk;#6HV%#&uIDC31weugs%p{EnFSh^BSg2|H z|3ZZIrWyYZw~4c1?=10Cc>5@M{4?WT@l+opwj2Kxd{L8yN22>*^z`M~3;Y#jav5e@ zF3drPfrs*~%7B?kKVJX;1OwIF7-Ws7JOW^YWBck>jBaaz5tv5rHOc`Z z+KnfCTrRhU`>R7UHP2LDwONL9hRe`>vfUJ>P`b39K_W{sAj&4_FV2~#v-n_1*n*_E zxM#)zTwcCa5$>LV8F`41{Y%$3j!QmdX8-h4zFO%m6Re=>3niKal*aqmmovr=BvJ?5 z{$l`s{I0mVX2xHT*u+ZyEUTF3{q$u5`1tfer=fqI-=~$8B7u9S=n0Pa|D+*ZpUAhb zBC+||pCfsNmqZ49F*1eq3oC``Ol+fqusP#CZXc-&#a7~F0QO!T_@gv!dZ~T`anUjv z7?6IZLi-3_8~isn5}P2_+Y~=<)2c{H4efqguz;2|y1$c>&q9NphD4ZvtnI;da_ z=T5GYXy8I&3n|0;^oZc<$r+?wmccY<^GmzF<7i&Txa@DLKRVajN%fG?&T2D^@s*hm zQ&H*!;c#}H#``)_g`gybnHfk(lho7=y62g|6WopQH;N(UC;IM{W8DmarRhJiY6Pvp z9x%Lt)b99s-jS1OL>iA#&-hf3)ZMR>)CNS8ho4ab!Gyp{uw^<)V`DyUW%McEAr$bh zt#HFiXsOT!r(w+*8uPgdrdF6n{)yfmMimD1?`~p0*{!kCohW_E0do4|Mb;LEy9BH$6olQP z!8_l+r9S?4%YyDfdzdbwQs&&OMdm|MC3}JF`=LrStz*~C4`Xk)9T6+B3B!^#4aooV z<4?Q{<*gWZBqb%&&JW(3UdnB)Lp1JG%fLbr&fBo>{pF$Fbz6HFVMT26?zthXK(bhs zF-jyeD~n$+-GYznSS9z~R~9fER9WR5uE8N}dC|bLPYc{Jc*hd>0M$=JJBr0FrY7^R z{PTiz)e)MI>NleMe|t0W9a@z?_=;aT{;h~#q@2xcJxgf)Eg)wF-sL@;_4?*dDHvVp ztTh0;!G&|c^dEx?j{o--pDiN6ND#YFr_7r6Q66N2M5jGa6>EZ{0u8p_Tbh<=!v42l z;6;_`DIeFf+TIh;DCq<3D2?BKj$F$}XN46n6#6DSV&rs2q{Mt~iNC-QAoI@TKulT z)uDk17*`khIu1$H{wYYsHss;b_fXmwjfbpTyD)GE_bb4VR%OTfGtN87D** z(J8i{JiG|~t5iQpnr@XcEM+58Nx?X5}S zdRR+x*PKb!)Ny`hrvIB?p|y1xUL?`ye;BeTO!*Gsq#|C1f9H)|ic;z5HhGMdO&m%o z|3}z#Ox`F#M;nSEw%*NR}E4*m@%R=_BZ8C6b z46Fz(WhIynVHY)dj8Y`V?F(GSFqepCR2~#^LyaRMW4;O1Xs;=1G^Z$p0NqQ9vN zZ$5&Cic3BE3$p;9Po4^?%AXN&joUKNzpS7}^Wdw(rCmjeJ&7Jt)B5Su_F)>r+sr_5 zFZfyM_dby1-GaZiS&Kl`(PVB9M`AneVzC?#MC@qB?w8hS-USux8rUu$9XhF1aYX*P zr)Q0~yUpywVe-T#qr?a1+RJ+?F@zk@_K&=xa=-U)7|QgOCyUE#Q9(fB5ccFY?lqD>1SXBq7XT&KYqcVDchTOPu}#Z zmZNpTQ*1$VQ0V0|daf|^FKCc#M1hatJf=O(VZ%QZ_HIPHp5!5tnOfL3rFzFS+YKCK!RKnl!P@EUk`sxktdszEk|RK3%`3J7)KMonx7=k^~F__GU`o z8nqhp;y){Lv#v6+sMk~?gp8IPA=a#_ffc!$_SM^hn2Sud7*0Th* z9tt~_1QsKUa9pJ9I=hLMcqqb>Uyy4UAwQqTUtv_eTzwdLIY<-{sie;IB@|oamA=UO zzC3$-J&+)gjB{^QvnR*zM{gX9u4SX!{G~C;qVU#vM*_xU<+HhZsokiMh%%k$e?xm) z(tCaQ#wn-z-L>e4yLZ&bG8B_Duv-LR5apIU!jHCQGJ{^ue&g25?HfZi@-duqTvQJS zRzr2pceh7h?p+6wfH!*}E<_$^{kl97EH88C%XUuVsoj76kL7gcS!5A`Mxmuec+mji z!f2;IgITl3&)x(ddi0xAPr3}hgGMiJ6$#IMZ|a;2 zPRQR}e=j}0Wl^4`YK?q~RJ&;+BKjS1pJGVSg1vom0B zH`%R=HNbyp!!b+0aSnS*bn!R~=rZSIDCKuZZSXkHg;e4XvJfHT{ZqB1gOBUUrmUG0aTriE; zGogI!q&bOR%O`(~;T1Y>YJ28M&doM0-1}^u(Pkm-TUg#=D>xPCJo@JhuV%b8vI(qG zs`Tz&7V9uLaEf@Ez*>tcUlN{NxY=ycd%nc*M9^-!#w;EyxG#!Q)r<8a^=2}FXl2+! zDnYWWZ#2XI#RNtA(_G7D9VFt96-JnU&U0HLJ9=OMojpzQHvx!pch=A4zSgyGap5oz z{yi0~TJnaHOG5Njofx-|TvSu_c}H0L3-l9VMWrmCfayjcx+D3z8&8ldah@#OYG>@r zS8N;Qub%S>`j@D}=k3PbL6ZIp{|Gk!aBPNL@399g`G7EzVexp?cAIu&Kd%q($tQ3< zk1aK&niQRhaJA}G;1hG7IB$5%^690`=++x1f7;k>T|&h3z(dIq0l*MEJ-j7I#%~hxm&_bgkxc zKn^izCT%N>%<@q6gaFU3bW!wkIJ~=`>~V1{L0gSQRcGbzmoloeGm{pDqcYw53egT` zOUw6(G@^J!L9y;>*#t9qBJ(~-MXXQ>y}KQ!Eb+hm{|1n{vTn+J`gl99j+CP3PYI}^ zGlO3gn;FTq#rPi}JR(P@k82s8LZQadzs7zYek9Ro{f{}W zcU)nF{ta2Qk;_b!L{tTe1nT$IM9bgnX~U1W7Ij= zZntSYghxo=i{@n$SHA)ld{hND3eHRY)Wmj#eO5X5irf^UUIEpa4WkYkOQR}azOf5W z3Ut9+0<4gg*}sHAF_jZ2>Y%k!&Zoid?G$^(P)R>@Lh~s9w;Pp;!fyo98f59@cZ&6lnk^K#eLYjHj za85U;U`6&6b_+P)oOFbh|F!|xoC6!k0hw$}j_l5C-%YMoXjJk;y54gYm}hadj`#$+ zlLnGJV0KNL-gG3?@ZI_t3|HB&%|ksBepyaGanCIrD1Z7=c>fjV1YL1hHEuv1v1E(x zkf{jflqO|B=lxQkGU^CE1>@PCL$9#`f;QRP%ggcCXhUUv27Q>`Yo4N5lVE)dC*E1c zC}3lGV5W3%55M0g+XeprI;qQR?07mZN_4zrc zdN;9NjVBhBU|QwZqv!&BtqX%9r%*Q$d{M7#g2;t*9c61({DmO9;HAm~cg_GgvyFop z(Eh15*2RGjdBsYIHeRZp*Rf*Kwj~*czW;ls zuYvOfTsvc)3%2Brc@^mu%#8a;Dv0~RMkOLK6n=K F{{UsDLx%tW literal 0 HcmV?d00001 diff --git a/src/json/jsonobject.cpp b/src/json/jsonobject.cpp index d239512..84796ec 100644 --- a/src/json/jsonobject.cpp +++ b/src/json/jsonobject.cpp @@ -281,8 +281,8 @@ host JsonObject::getServer(ServerType type) case JsonObject::PACS: typeName = "pacs"; break; - case JsonObject::DAQ: - typeName = "daq"; + case JsonObject::LOCAL: + typeName = "address"; break; case JsonObject::RECON: typeName = "recon"; @@ -310,8 +310,8 @@ void JsonObject::setServer(ServerType type, const host& list) case JsonObject::PACS: typeName = "pacs"; break; - case JsonObject::DAQ: - typeName = "daq"; + case JsonObject::LOCAL: + typeName = "address"; break; case JsonObject::RECON: typeName = "recon"; diff --git a/src/json/jsonobject.h b/src/json/jsonobject.h index 468d908..9f255d3 100644 --- a/src/json/jsonobject.h +++ b/src/json/jsonobject.h @@ -38,7 +38,7 @@ public: } enum ServerType { - WORKLIST, PACS, DAQ, RECON + WORKLIST, PACS, LOCAL, RECON }; //for login diff --git a/src/network/dicomcfgdialog.cpp b/src/network/dicomcfgdialog.cpp new file mode 100644 index 0000000..6429576 --- /dev/null +++ b/src/network/dicomcfgdialog.cpp @@ -0,0 +1,95 @@ +#include "dicomcfgdialog.h" +#include "ui_dicomcfgdialog.h" +#include +#include + +#include "json/jsonobject.h" +dicomCfgDialog::dicomCfgDialog(QWidget* parent) : + QDialog(parent), + ui(new Ui::dicomCfgDialog) +{ + ui->setupUi(this); + //this->setFixedWidth(500); + this->setObjectName("formDialog"); + this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); + + ui->btn_group->button(QDialogButtonBox::Apply)->setText(tr("Apply")); + ui->btn_group->button(QDialogButtonBox::Cancel)->setText(tr("Cancel")); + + loadServersInfo(); + + connect(ui->btn_group->button(QDialogButtonBox::Apply), &QPushButton::clicked, [=]() + { + saveServersInfo(); + accept(); + }); + connect(ui->btn_group->button(QDialogButtonBox::Cancel), &QPushButton::clicked, [=]() + { + reject(); + }); + ui->tabWidget->setCurrentIndex(0); +} + +dicomCfgDialog::~dicomCfgDialog() +{ + delete ui; +} + + +void dicomCfgDialog::loadServersInfo() +{ + host h; + h = JsonObject::Instance()->getServer(JsonObject::RECON); + ui->recon_AE->setText(h.ae); + ui->recon_IP->setText(h.ip); + ui->recon_Name->setText(h.name); + ui->recon_Port->setText(h.port); + + h = JsonObject::Instance()->getServer(JsonObject::PACS); + ui->pacs_AE->setText(h.ae); + ui->pacs_IP->setText(h.ip); + ui->pacs_Name->setText(h.name); + ui->pacs_Port->setText(h.port); + + + h = JsonObject::Instance()->getServer(JsonObject::WORKLIST); + ui->wl_AE->setText(h.ae); + ui->wl_IP->setText(h.ip); + ui->wl_Name->setText(h.name); + ui->wl_Port->setText(h.port); + + + + //qIfConfig(lhost); + + +} + + +void dicomCfgDialog::saveServersInfo() +{ + + host h; + h.ae = ui->recon_AE->text(); + h.ip = ui->recon_IP->text(); + h.name = ui->recon_Name->text(); + h.port = ui->recon_Port->text(); + JsonObject::Instance()->setServer(JsonObject::RECON, h); + + h.ae = ui->pacs_AE->text(); + h.ip = ui->pacs_IP->text(); + h.name = ui->pacs_Name->text(); + h.port = ui->pacs_Port->text(); + JsonObject::Instance()->setServer(JsonObject::PACS, h); + + h.ip = ui->wl_IP->text(); + h.ae = ui->wl_AE->text(); + h.name = ui->wl_Name->text(); + h.port = ui->wl_Port->text(); + JsonObject::Instance()->setServer(JsonObject::WORKLIST, h); + + + + + +} \ No newline at end of file diff --git a/src/network/dicomcfgdialog.h b/src/network/dicomcfgdialog.h new file mode 100644 index 0000000..d6060ca --- /dev/null +++ b/src/network/dicomcfgdialog.h @@ -0,0 +1,25 @@ +#ifndef DICOMCFGDIALOG_H +#define DICOMCFGDIALOG_H + +#include + +namespace Ui { + class dicomCfgDialog; +} + +class dicomCfgDialog : public QDialog +{ + Q_OBJECT + +public: + explicit dicomCfgDialog(QWidget* parent = nullptr); + ~dicomCfgDialog(); + +private: + Ui::dicomCfgDialog* ui; + + void loadServersInfo(); + void saveServersInfo(); +}; + +#endif // DICOMCFGDIALOG_H diff --git a/src/network/networkcfgdialog.h b/src/network/networkcfgdialog.h index b8eafa8..9f05d33 100644 --- a/src/network/networkcfgdialog.h +++ b/src/network/networkcfgdialog.h @@ -29,7 +29,12 @@ public slots: void beforeThreadExit(); private: - bool isModified(); + bool isJsonModified(); + bool isNetModified(); + void loadJsonData(); + void saveJsonData(); + + const char* boolToStr(bool b) { return b ? "sucess" : "failed"; diff --git a/src/networkcfgdialog.ui b/src/networkcfgdialog.ui index 672d896..ce4262a 100644 --- a/src/networkcfgdialog.ui +++ b/src/networkcfgdialog.ui @@ -6,8 +6,8 @@ 0 0 - 819 - 662 + 820 + 671 @@ -20,27 +20,21 @@ Network Settings - -QTabWidget::pane { - border-top: 0px; -} - -QTabBar::tab { + QTabBar::tab { font-size:25px; height:40px; -width:120px; -background:#4d4d4d; +width:190px; border: 0px; border-top-left-radius: 0%; border-top-right-radius: 0%; border-bottom-left-radius:0%; border-bottom-right-radius:0%; -padding: 2px; +background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #505050, stop: 1.0 #333333); } QTabBar::tab:selected, QTabBar::tab:hover { -border-bottom:5px solid #4a88c7; -background: #505050;} +background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #ABABAB, stop: 1.0 #CDCDCD); +} QLineEdit#led_inface{font-size:15px;border: 0px;} @@ -54,7 +48,7 @@ QLineEdit#led_inface{font-size:15px;border: 0px;} - Network Setting + Network Settings Qt::AlignCenter @@ -66,9 +60,18 @@ QLineEdit#led_inface{font-size:15px;border: 0px;} true + + QTabWidget::North + + + QTabWidget::Rounded + 0 + + Qt::ElideLeft + Address @@ -103,7 +106,7 @@ QLineEdit#led_inface{font-size:15px;border: 0px;} - Dynamic Address + DHCP @@ -432,6 +435,76 @@ QLineEdit#led_inface{font-size:15px;border: 0px;} + + + DICOM + + + + + + + + + Name + + + + + + + + + + + + + + + + Port + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + AE + + + + + + + IP + + + + + + + false + + + + + + + + Result diff --git a/src/res.qrc b/src/res.qrc index 3038e07..5a629dd 100644 --- a/src/res.qrc +++ b/src/res.qrc @@ -27,6 +27,10 @@ icons/female_d.png icons/male_d.png icons/login.png + icons/dicomsettings.png + icons/dicomsettings_d.png + icons/networksettings.png + icons/networksettings_d.png fonts/DroidSansFallback.ttf translations/en_US.qm translations/zh_CN.qm diff --git a/src/stylesheet/Dark2.qss b/src/stylesheet/Dark2.qss index 64ca969..44565a3 100644 --- a/src/stylesheet/Dark2.qss +++ b/src/stylesheet/Dark2.qss @@ -1 +1 @@ - /*------1.silver-->grey--------------------------*/ *{background-color:#3c3c3c; color:#fcfcfc;margin:0;font-size:16px;} QTabBar::tab { height:60px; width:300px; font-size: 25px; background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #333333, stop: 1.0 #505050); border: 2px solid #505050; border-bottom-left-radius: 50%; border-bottom-right-radius: 50%; min-width: 8ex; padding: 2px; } QTabBar::tab:selected, QTabBar::tab:hover { border-top:5px solid #4a88c7; background: #505050;} QTabWidget::pane{margin:0} QPlainTextEdit{border:0px} QGroupBox{border:0px} QLabel{color:#fcfcfc; font-weight:bold; font-size:16px;} QLineEdit{min-height:36px;max-height:36px; border:1px solid #505050;color:grey;border-radius:3px;} QLineEdit:enabled{background-color: #505050;color:#fcfcfc;} QDateEdit{min-height:36px;max-height:36px; border:1px solid #505050;color:grey;border-radius:3px;} QDateEdit:enabled{background-color: #505050;color:#fcfcfc;} QTextEdit{ border:1px solid #505050;color:grey;border-radius:3px;} QTextEdit:enabled{background-color: #505050;color:#fcfcfc;} QComboBox{text-align:center;min-height:36px;max-height:36px; border:1px solid #505050} QComboBox:enabled{background-color: #505050} QComboBox::drop-down{width:20px} QComboBox QAbstractItemView{min-width:120px;} QComboBox QAbstractItemView::item {min-height:60px;max-height:60px; border:1px solid white;} QWidget QToolButton{border:none;border-radius:10%;font-size:26px; font-weight:Bold;padding:5px;} QWidget QToolButton:disabled{color:#606060 } QWidget QToolButton:hover{background:#505050;} QWidget QToolButton:checked{border:5px solid darkorange;padding:0px;} QPushButton{border:1px solid #505050 ;padding-left:50px;padding-right:50px; border-radius:5px; min-height:28px; max-height:28px; background:#4c5052} QListView{border:none;margin:5px; font-weight:bold} QListView::item{background:#4c5052;min-height:30px; border:1px solid #505050; border-radius:5px} QListView::item:selected{background:#365880;font-weight:bold;color:#fcfcfc;} /*QListView::item:selected{ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ABAFE5, stop: 1 #8588B2); border:1px solid #505050; }*/ QHeaderView::section{background-color:#595959;min-height:50px;max-height:50px;font-weight:Bold; font-size:16px; border:1px solid #323232;} QHeaderView::section:horizontal{border-bottom: 1px solid rgb(0,170,255);} QHeaderView::section:vertical{min-height:36px;max-height:36px;} QTableView{border:none;alternate-background-color: #595959;selection-color:#fcfcfc;selection-background-color:#0078d8} /*-----------Specific---------------*/ QLabel#sliderPickerLabel{color:grey;padding:0;background:#505050;font-weight:normal;font-size:50px;} QWidget#topbarWidget{min-height:36px;max-height:36px;} QWidget#contentWidget{border-top:1px solid #505050;} QWidget#commandWidget{min-height:123px;max-height:123px;border-top:1px solid #505050; border-bottom:1px solid #323232;} QLabel#logo{min-width:30px;max-width:30px} QLabel#company{min-width:150px;max-width:150px; } QLabel#systemMsgBar{min-width:500px;} QLabel#warn{color:#CCCC00;background:transparent;font-size:20px;} QWidget QWidget#statusBarWidget{min-width:300px;} QToolButton#btn_main{border:2px solid #0078d8;border-radius:10%;font-size:26px; font-weight:Bold;padding:5px;} QWidget#editcmdWidget{min-height:83px;max-height:83px;} QWidget#verSpaceLine{ border-right:1px solid #0078d8;} QWidget#topBottomLine{ border-top:2px solid #0078d8;border-bottom:2px solid #0078d8;background:transparent} /*-----蒙版Dialog-----*/ QDialog QWidget#innerWidget{ background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0.0 darkgray, stop: 0.5 lightgray, stop: 1.0 darkgray); border-radius:20px;border:5px solid #0078d8; } QDialog#MessageDialog QWidget QWidget{ background:transparent;color:#3078d8} QDialog#MessageDialog QWidget QWidget QLabel{ font-size:30px} #spacer_1, #spacer_2{min-width:2px;max-width:2px;margin-top:6px;margin-bottom:6px;border-right:1px solid #0078d8;} /*-----FormDialog-----*/ QPushButton#btnOK{background:#365880; font-weight:bold} QDialog#formDialog{border:3px solid grey; border-radius:8px} QWidget#slider_one{border:1px solid #505050; border-radius:8px} QWidget#formWidget QLabel#endline{border-bottom:1px solid grey} QWidget#formWidget{font-size:30px;} QLabel#title{font-size:30px; border-bottom:1px solid #3078d8 } QWidget#edit_patient{min-width:300px;max-width:300px;} QToolButton#sexBtn{min-width:120px;max-width:120px;font-size:20px;padding:2px;} QToolButton#sexBtn:disabled{color:grey} QWidget#sexpanelwidget{border:1px solid #505050;} QWidget#sexpanelwidget:enabled{background-color: #505050;} QToolButton#sexBtn:checked{border:2px solid darkorange;padding:0px;} \ No newline at end of file + /*------1.silver-->grey--------------------------*/ *{background-color:#3c3c3c; color:#fcfcfc;margin:0;font-size:16px;} QTabBar::tab { height:60px; width:300px; font-size: 25px; background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #505050, stop: 1.0 #333333); border: 2px solid #505050; border-bottom-left-radius: 50%; border-bottom-right-radius: 50%; min-width: 8ex; padding: 2px; } QTabBar::tab:selected, QTabBar::tab:hover { border-top:5px solid #4a88c7; background: #505050;} QTabWidget::pane{margin:0} QPlainTextEdit{border:0px} QGroupBox{border:0px} QLabel{color:#fcfcfc; font-weight:bold; font-size:16px;} QLineEdit{min-height:36px;max-height:36px; border:1px solid #505050;color:grey;border-radius:3px;} QLineEdit:enabled{background-color: #505050;color:#fcfcfc;} QDateEdit{min-height:36px;max-height:36px; border:1px solid #505050;color:grey;border-radius:3px;} QDateEdit:enabled{background-color: #505050;color:#fcfcfc;} QTextEdit{ border:1px solid #505050;color:grey;border-radius:3px;} QTextEdit:enabled{background-color: #505050;color:#fcfcfc;} QComboBox{text-align:center;min-height:36px;max-height:36px; border:1px solid #505050} QComboBox:enabled{background-color: #505050} QComboBox::drop-down{width:20px} QComboBox QAbstractItemView{min-width:120px;} QComboBox QAbstractItemView::item {min-height:60px;max-height:60px; border:1px solid white;} QWidget QToolButton{border:none;border-radius:10%;font-size:26px; font-weight:Bold;padding:5px;} QWidget QToolButton:disabled{color:#606060 } QWidget QToolButton:hover{background:#505050;} QWidget QToolButton:checked{border:5px solid darkorange;padding:0px;} QPushButton{border:1px solid #505050 ;padding-left:50px;padding-right:50px; border-radius:5px; min-height:28px; max-height:28px; background:qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #505050, stop:1 #606060);} QListView{border:none;margin:5px; font-weight:bold} QListView::item{background:#4d4d4d;min-height:30px; border:1px solid #505050; border-radius:5px} QListView::item:selected{background:#365880;font-weight:bold;color:#fcfcfc;} /*QListView::item:selected{ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ABAFE5, stop: 1 #8588B2); border:1px solid #505050; }*/ QHeaderView::section{background-color:#595959;min-height:50px;max-height:50px;font-weight:Bold; font-size:16px; border:1px solid #323232;} QHeaderView::section:horizontal{border-bottom: 1px solid rgb(0,170,255);} QHeaderView::section:vertical{min-height:36px;max-height:36px;} QTableView{border:none;alternate-background-color: #595959;selection-color:#fcfcfc;selection-background-color:#0078d8} /*-----------Specific---------------*/ QLabel#sliderPickerLabel{color:grey;padding:0;background:#505050;font-weight:normal;font-size:50px;} QWidget#topbarWidget{min-height:36px;max-height:36px;} QWidget#contentWidget{border-top:1px solid #505050;} QWidget#commandWidget{min-height:123px;max-height:123px;border-top:1px solid #505050; border-bottom:1px solid #323232;} QLabel#logo{min-width:30px;max-width:30px} QLabel#company{min-width:150px;max-width:150px; } QLabel#systemMsgBar{min-width:500px;} QLabel#warn{color:#CCCC00;background:transparent;font-size:20px;} QWidget QWidget#statusBarWidget{min-width:300px;} QToolButton#btn_main{border:2px solid #0078d8;border-radius:10%;font-size:26px; font-weight:Bold;padding:5px;} QWidget#editcmdWidget{min-height:83px;max-height:83px;} QWidget#verSpaceLine{ border-right:1px solid #0078d8;} QWidget#topBottomLine{ border-top:2px solid #0078d8;border-bottom:2px solid #0078d8;background:transparent} /*-----蒙版Dialog-----*/ QDialog QWidget#innerWidget{ background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0.0 darkgray, stop: 0.5 lightgray, stop: 1.0 darkgray); border-radius:20px;border:5px solid #0078d8; } QDialog#MessageDialog QWidget QWidget{ background:transparent;color:#3078d8} QDialog#MessageDialog QWidget QWidget QLabel{ font-size:30px} #spacer_1, #spacer_2{min-width:2px;max-width:2px;margin-top:6px;margin-bottom:6px;border-right:1px solid #0078d8;} /*-----FormDialog-----*/ QPushButton#btnOK{background:#365880; font-weight:bold} QDialog#formDialog{border:3px solid grey; border-radius:8px} QWidget#slider_one{border:1px solid #505050; border-radius:8px} QWidget#formWidget QLabel#endline{border-bottom:1px solid grey} QWidget#formWidget{font-size:30px;} QLabel#title{font-size:30px; border-bottom:1px solid #3078d8 } QWidget#edit_patient{min-width:300px;max-width:300px;} QToolButton#sexBtn{min-width:120px;max-width:120px;font-size:20px;padding:2px;} QToolButton#sexBtn:disabled{color:grey} QWidget#sexpanelwidget{border:1px solid #505050;} QWidget#sexpanelwidget:enabled{background-color: #505050;} QToolButton#sexBtn:checked{border:2px solid darkorange;padding:0px;} \ No newline at end of file diff --git a/src/systemsettingform.cpp b/src/systemsettingform.cpp index c8ce749..ebb8825 100644 --- a/src/systemsettingform.cpp +++ b/src/systemsettingform.cpp @@ -9,12 +9,14 @@ #include #include #include -#include "json/jsonobject.h" + #include "SelectDialog.h" #include "components/imageswitch.h" #include "network/networkcfgdialog.h" +#include "network/dicomcfgdialog.h" #include "network/getadminpsw.h" +#include "json/jsonobject.h" #include "event/EventCenter.h" systemSettingForm::systemSettingForm(QWidget* parent) : QWidget(parent), @@ -24,29 +26,27 @@ systemSettingForm::systemSettingForm(QWidget* parent) : //style init - ui->btnCancel->setToolButtonStyle(Qt::ToolButtonIconOnly); - ui->btnCancel->setIcon(QIcon(":/icons/close_circle.png")); - ui->btnCancel->setIconSize(QSize(50, 50)); - ui->btnAccept->setToolButtonStyle(Qt::ToolButtonIconOnly); - ui->btnAccept->setIcon(QIcon(":/icons/selected.png")); - ui->btnAccept->setIconSize(QSize(50, 50)); + //ui->btn_dicom->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + ui->btn_dicom->setIcon(QIcon(":/icons/dicomsettings.png")); + //ui->btn_dicom->setText(tr("DICOM")); + ui->btn_dicom->setIconSize(QSize(80, 80)); + + //ui->btn_network->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + ui->btn_network->setIcon(QIcon(":/icons/networksettings.png")); + //ui->btn_network->setText(tr("IP")); + ui->btn_network->setIconSize(QSize(80, 80)); + ui->swt_verify->setChecked(true); - //ui->swt_verify->setButtonStyle(ImageSwitch::ButtonStyle_1); - - - - ui->btnFlt->setFixedWidth(200); - ui->btnPro->setFixedWidth(200); - ui->lbl_protocal->setFixedWidth(100); - //lbl_filter - ui->lbl_list->setFixedWidth(100); + //ui->btnFlt->setFixedWidth(200); + //ui->btnPro->setFixedWidth(200); + //ui->lbl_protocal->setFixedWidth(100); ui->lbl_verify->setFixedWidth(100); //data init ui->btnPro->setText(JsonObject::Instance()->defaultProtocal()); ui->btnFlt->setText(JsonObject::Instance()->defaultFilter()); - loadServersInfo(); + //connection connect(ui->swt_verify, &ImageSwitch::clicked, [=]() { @@ -65,12 +65,15 @@ systemSettingForm::systemSettingForm(QWidget* parent) : dia.exec(); } }); - connect(ui->btnCancel, &QToolButton::clicked, [=]() { - loadServersInfo(); - }); - connect(ui->btnAccept, &QToolButton::clicked, [=]() { - saveServersInfo(); + + connect(ui->btn_dicom, &QToolButton::clicked, [=]() { + dicomCfgDialog dia(this); + dia.setWindowModality(Qt::WindowModal); + dia.exec(); }); + + + connect(ui->btnPro, &QPushButton::clicked, [=]() { if (!sd_protocal) { sd_protocal = new SelectDialog(this); @@ -105,6 +108,9 @@ systemSettingForm::systemSettingForm(QWidget* parent) : connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() { ui->retranslateUi(this); + + ui->btnPro->setText(JsonObject::Instance()->defaultProtocal()); + ui->btnFlt->setText(JsonObject::Instance()->defaultFilter()); }); } @@ -113,84 +119,7 @@ systemSettingForm::~systemSettingForm() delete ui; } -void systemSettingForm::loadServersInfo() -{ - host h; - h = JsonObject::Instance()->getServer(JsonObject::RECON); - ui->recon_AE->setText(h.ae); - ui->recon_IP->setText(h.ip); - ui->recon_Name->setText(h.name); - ui->recon_Port->setText(h.port); - h = JsonObject::Instance()->getServer(JsonObject::PACS); - ui->pacs_AE->setText(h.ae); - ui->pacs_IP->setText(h.ip); - ui->pacs_Name->setText(h.name); - ui->pacs_Port->setText(h.port); - - - h = JsonObject::Instance()->getServer(JsonObject::DAQ); - ui->daq_AE->setText(h.ae); - ui->daq_IP->setText(h.ip); - ui->daq_Name->setText(h.name); - ui->daq_Port->setText(h.port); - - h = JsonObject::Instance()->getServer(JsonObject::WORKLIST); - ui->wl_AE->setText(h.ae); - ui->wl_IP->setText(h.ip); - ui->wl_Name->setText(h.name); - ui->wl_Port->setText(h.port); - - //localhost lhost = JsonObject::Instance()->getLocalHost(); - //local_IP->setIP(lhost.ip); - //local_Mask->setIP(lhost.mask); - //local_Gate->setIP(lhost.gateway); - - //qIfConfig(lhost); - - -} - - -void systemSettingForm::saveServersInfo() -{ - - host h; - h.ae = ui->recon_AE->text(); - h.ip = ui->recon_IP->text(); - h.name = ui->recon_Name->text(); - h.port = ui->recon_Port->text(); - JsonObject::Instance()->setServer(JsonObject::RECON, h); - - h.ae = ui->pacs_AE->text(); - h.ip = ui->pacs_IP->text(); - h.name = ui->pacs_Name->text(); - h.port = ui->pacs_Port->text(); - JsonObject::Instance()->setServer(JsonObject::PACS, h); - - h.ip = ui->wl_IP->text(); - h.ae = ui->wl_AE->text(); - h.name = ui->wl_Name->text(); - h.port = ui->wl_Port->text(); - JsonObject::Instance()->setServer(JsonObject::WORKLIST, h); - - - h.ip = ui->daq_IP->text(); - h.ae = ui->daq_AE->text(); - h.name = ui->daq_Name->text(); - h.port = ui->daq_Port->text(); - JsonObject::Instance()->setServer(JsonObject::DAQ, h); - - - //localhost lhost; - //lhost.ip = local_IP->getIP(); - //lhost.mask = local_Mask->getIP(); - //lhost.gateway = local_Gate->getIP(); - //JsonObject::Instance()->setLocalHost(lhost); - - //qIfConfig(lhost); - -} //void systemSettingForm::changeEvent(QEvent* event) //{ diff --git a/src/systemsettingform.h b/src/systemsettingform.h index 660122f..2e06b5a 100644 --- a/src/systemsettingform.h +++ b/src/systemsettingform.h @@ -27,9 +27,6 @@ private: Ui::systemSettingForm* ui; SelectDialog* sd_protocal = nullptr; SelectDialog* sd_filter = nullptr; - - void loadServersInfo(); - void saveServersInfo(); }; #endif // SYSTEMSETTINGFORM_H diff --git a/src/systemsettingform.ui b/src/systemsettingform.ui index 1e1fbf1..2b3f205 100644 --- a/src/systemsettingform.ui +++ b/src/systemsettingform.ui @@ -6,7 +6,7 @@ 0 0 - 619 + 572 612 @@ -20,8 +20,18 @@ - - + + + + + 25 + 25 + + + + + + Qt::Horizontal @@ -36,15 +46,8 @@ - - - - Network Setting - - - - - + + 100 @@ -52,7 +55,7 @@ - PushButton + Auto Verify @@ -63,6 +66,19 @@ + + + + + 100 + 50 + + + + + + + @@ -79,236 +95,71 @@ - - - - - 100 - 0 - - + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + + - PushButton + DICOM + + + Qt::ToolButtonTextBesideIcon - + Worklist Filter - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 40 - 20 - - - - - - - - - - - 100 - 0 - - + - Auto Verify + IP + + + Qt::ToolButtonTextBesideIcon - - + + + + + 100 + 50 + + - Configure + - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 25 - - - 10 - - - - - - - - - - - - - - - - - - - - - - - - - - IP - - - - - - - - - - - - - - - - Name - - - - - - - AE - - - - - - - - - - PACS - - - - - - - - - - 3D Recon - - - - - - - - - - - 100 - 0 - - - - Worklist - - - - - - - DAQ - - - - - - - - - - - - - Port - - - - - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Cancel - - - - - - - Accept - - - @@ -332,6 +183,7 @@ ImageSwitch QWidget
components/imageswitch.h
+ 1 diff --git a/src/translations/en_US.ts b/src/translations/en_US.ts index 28054c3..cf6dde5 100644 --- a/src/translations/en_US.ts +++ b/src/translations/en_US.ts @@ -7,22 +7,10 @@ Account - - User ID - - - - Input User ID - - Name - - Input User name - - Password @@ -87,6 +75,18 @@ Reset Password + + User ID + + + + Input User ID + + + + Input User name + + AccountTableForm @@ -110,6 +110,22 @@ Delete + + ID + + + + Name + + + + Role + + + + Comment + + AdminSettingForm @@ -133,10 +149,6 @@ Information - - Log - - AlertDialog @@ -264,7 +276,11 @@ - Lock Screen Timeout + s + + + + Lock Screen @@ -508,6 +524,10 @@ parameters Add Date + + Comment + + TabFormWidget @@ -534,6 +554,53 @@ parameters + + dicomCfgDialog + + Dialog + + + + Name + + + + IP + + + + Port + + + + AE + + + + Worklist + + + + PACS + + + + 3D Recon + + + + Apply + + + + Cancel + + + + DICOM Settings + + + networkCfgDialog @@ -544,10 +611,6 @@ parameters IP Address - - Dynamic Address - - Dev @@ -613,7 +676,27 @@ parameters - Network Setting + DHCP + + + + Name + + + + Port + + + + AE + + + + IP + + + + DICOM @@ -623,14 +706,6 @@ parameters Form - - Network Setting - - - - PushButton - - Protocal @@ -643,48 +718,12 @@ parameters Auto Verify - - Configure - - IP - Name - - - - AE - - - - PACS - - - - 3D Recon - - - - Worklist - - - - DAQ - - - - Port - - - - Cancel - - - - Accept + DICOM diff --git a/src/translations/en_US.ts.bak b/src/translations/en_US.ts.bak index 28054c3..cf6dde5 100644 --- a/src/translations/en_US.ts.bak +++ b/src/translations/en_US.ts.bak @@ -7,22 +7,10 @@ Account - - User ID - - - - Input User ID - - Name - - Input User name - - Password @@ -87,6 +75,18 @@ Reset Password + + User ID + + + + Input User ID + + + + Input User name + + AccountTableForm @@ -110,6 +110,22 @@ Delete + + ID + + + + Name + + + + Role + + + + Comment + + AdminSettingForm @@ -133,10 +149,6 @@ Information - - Log - - AlertDialog @@ -264,7 +276,11 @@ - Lock Screen Timeout + s + + + + Lock Screen @@ -508,6 +524,10 @@ parameters Add Date + + Comment + + TabFormWidget @@ -534,6 +554,53 @@ parameters + + dicomCfgDialog + + Dialog + + + + Name + + + + IP + + + + Port + + + + AE + + + + Worklist + + + + PACS + + + + 3D Recon + + + + Apply + + + + Cancel + + + + DICOM Settings + + + networkCfgDialog @@ -544,10 +611,6 @@ parameters IP Address - - Dynamic Address - - Dev @@ -613,7 +676,27 @@ parameters - Network Setting + DHCP + + + + Name + + + + Port + + + + AE + + + + IP + + + + DICOM @@ -623,14 +706,6 @@ parameters Form - - Network Setting - - - - PushButton - - Protocal @@ -643,48 +718,12 @@ parameters Auto Verify - - Configure - - IP - Name - - - - AE - - - - PACS - - - - 3D Recon - - - - Worklist - - - - DAQ - - - - Port - - - - Cancel - - - - Accept + DICOM diff --git a/src/translations/zh_CN.qm b/src/translations/zh_CN.qm index 03cdfc6f73d4e218e2a77b5f5ebb9885752a2d06..f569de61c8feae72283a104a5c330d5581be9e45 100644 GIT binary patch delta 1894 zcmZXU3rtg27{|Z1_q4sey=|#L3w;Zyi3%|eg$(DTMFDv^#&jx+1S&G1Oz;shv5M}2 zgE&2+!=X{9CMqhzj08o)LU5aTE!o@LHw%F10H7E^QwqSP0|b{an#Ul!0OWm)>J7+y0H#bv zYbT>41!KGkAVvU8(jXTB%-N5&0!G70MspH?H{l|H)dkS$1PD3>(xp!Tv0{x_s$yu!d1 zc()g&4_p9w5i0FgBTKc%-8|LGPY+y7+aaW?Q-~=ccbt*>NJ6y-m%}E$Xz2xpBeCx%lO!s{N7<)+M z04ge-OrrFA0aX2DqpKYiZy^=6Z(zqyNX_{D*olELD3Tnk!nLxA)E#a{+DZEj4|bkF zIyU#9UmoeWhI1`FPp&2|MW;DH2 zq{nh7X_2Dh>JGf3CdJNtf0P;+6%~wzj}=EM?gN+`6~{eDO*fk~1dq*17v<;2cPgk$yiE0E1qPha1Q1(mC7 zTpMxt($%LW_?ywsP+uwQLjMx=!x<>C>MPMfZsQQI6C<4c0K7|#S?k6EJz{w(Hl$1u zH+ACGYVTyQ59=GD1APwq@*8DE!<*dOh57EG?QKH1bmchODr{{iQ{R)xr0*5eRHHxrNVkku z>O}fXXO>A}gp=ZnsB)IfOZGkGm){e|BL}fkZYUy`;FIM_)vI z@fuQ%soYSZ56y;#J?2gcy&WRboufrwlbxGYSm0cmL;L*#MCr^}UsPtK65AO0zn>Ad zu?fSjuH4N0!W@YVJ$2xMcyK}rB!T_&vtG||gBn-7GbPEM=3cQP*OOEHUs#sQJ~A`a zhAKu{^jvagf&2Ai0eUWVrZeq-X4((d z&Q!D-d@DH_DjJt2T41|L*Vq^O%)a921+@KOkMONIUum?(W~Ph$Ei~LQj&8-*=ZIC% pZbu+(c3h*QLZa#Mkl~ouLyh!YsD_@kDCv`s>GW~vWLg@Q@DDTw_rd@G delta 1689 zcmYk6eN0nl6vj{6d)waLd;7sx3zSl@z~ea>^v zy}Ot6FY;ydlo`(4ZD|~gGoC1JJAQ2e0CO6jLV%cGkV60hAg=?&#saW&aoi1%tVaF{ zkhKTrHd5;2C?o3tvP%F=0f5|70MV}i6chm{TmXYs0KqXnri_!9L1n4=7U zd^@H7Hf8iKU@m4IzD#{2Gu=|SvB6fg!whl9Fg0uk)6f*~Af9}Wm9LU<$ zhl0O?>`k*Vffu1*%_M;KJyjiy3RMr zq@5}QkZG9BEvQ)4Lumr0<`fF!mNJd)$+-R{^JxwWRE<#zHIz|BlqLt$IjtR?`iD~g zEoD?cb8rXNUX(Lu)6b#+H>Ji)=`&7c0>PT`TPZ{B%(=az*gQ?l)!ZL&{ye22oJ}1= z%cUu7dI(ynTFvgX4dA{RY<=ge=)^GF^3op6sG8DH$?k2$u`-qI>Nt+g_Zb`b@G`Dn zWCK5yV4Pm|TwW#kK(m(}j;=&yLzG&JJV$#7$8GYJN3nBbI^-Xv+OTU|Da{)cg$o(1 z^;JdvxlgdxiHhb8VQ4i_%10<8#ufYPu_Tcbii1w1I+HT`zH&+T1Uk~D?6`5$he{fP zFBq^(dAuG!z3_Wn?&T|ZFrQn0<24LBm#bKf-=JB}RjiqY>kZt7E+e{S6Jo|TI|_4(wH5i8iQ=yiOV2EB2kvzVyQ|7e9)*Pa1EFhJ8p=N{GN18x#tcfxb-X<-A%g6S3y}W! z;dte;eZ`WZ8AX}TZqV2^J4-e?O3m}j%G`F3ha8$>B&}0cl32?u;*-XdwBCB3T=!Abp8?QlX7}%)1F`WS7<$ zd^a!+i+#>#H*;2(bDg8S%58son337$FMTp7Bxxr7;|NDAA=>9fcpc92C!5qv{(Nh} i(*c>ZC?B6_PfQ7F;Z^xnp7jf=yx!;ZwU|WQv-W=q3dqO+ diff --git a/src/translations/zh_CN.ts b/src/translations/zh_CN.ts index 40418aa..43df1f9 100644 --- a/src/translations/zh_CN.ts +++ b/src/translations/zh_CN.ts @@ -127,18 +127,44 @@ AccountTableForm + + + ID + + + + + + Name + 姓名 + + + + + Role + 角色 + + + + + Comment + 备注 + + Add 新增 + Edit 编辑 + Delete 删除 @@ -156,34 +182,32 @@ AdminSettingForm - + General 通用 - + Account - 账户 + 用户 - + System 系统 - + Information 信息 - - Log - 日志 + 日志 Account Manage @@ -202,10 +226,10 @@ 操作日志 - + - + About 关于 @@ -276,7 +300,7 @@ ID - 编号 + @@ -295,27 +319,30 @@ - Gender 性别 - + + Female - 女性 + - + + Male - 男性 + - + + Cancel 取消 - + + Accept 接受 @@ -350,7 +377,7 @@ GeneralForm - + Language 语言 @@ -361,17 +388,26 @@ - - + + Institution Addr 机构地址 - - Lock Screen Timeout + + Lock Screen 锁屏时间 + + Lock Screen Timeout + 锁屏时间 + + + + s + + GetAdminPsw @@ -538,7 +574,7 @@ Female - 女性 + @@ -577,41 +613,49 @@ ScanFormWidget + Protocol 扫描协议 + LEFT 左侧 + RIGHT 右侧 + Refresh 空扫 + Preview 预扫 + Stop 停止 + Scan 扫描 + Preview Parameters 预览参数 @@ -626,6 +670,7 @@ parameters + Scan Parameters 扫描参数 @@ -634,6 +679,7 @@ parameters SelectFormWidget + Account 账户 @@ -644,44 +690,58 @@ parameters + Add 新增 + Edit 编辑 + Delete 删除 + Select 选择 + Name 姓名 + Birth Date 出生日期 + Gender 性别 + Add Date 添加日期 + + + + Comment + 备注 + TabFormWidget @@ -708,88 +768,188 @@ parameters UserOperationLogForm + Log Date: 日志时间 + + dicomCfgDialog + + + Dialog + + + + DICOM Setting + DICOM 设置 + + + + DICOM Settings + DICOM 配置 + + + + + + Name + + + + + + + IP + + + + + + + Port + + + + + + + AE + + + + + Worklist + + + + + PACS + + + + + 3D Recon + + + + + Apply + 应用 + + + + Cancel + 取消 + + networkCfgDialog - + + Network Settings 网络配置 - + Address IP配置 - + IP Address IP地址 - Network Setting - 网络配置 + 网络配置 - Dynamic Address - 动态地址 + 动态地址 - + Dev 设备 - + Subnet Mask 子网掩码 - + Additional Address 额外地址 - - + + Add 新增 - - + + Edit 编辑 - - + + Delete 删除 - + Routing 路由配置 - + Default IPv4 Gateway 默认网关 - + + DHCP + + + + Routing Table 路由表 - + + Name + + + + + Port + + + + + AE + + + + + IP + + + + + DICOM + + + + Result 结果 @@ -823,90 +983,58 @@ parameters systemSettingForm - + Form - Network Setting - 网络配置 + 网络配置 - - - PushButton - - - - + Protocal 扫描协议 - + Worklist Filter Worklist过滤器 - + ... + DICOM + + + Auto Verify 自动验证 - Configure - 配置 + 配置 - + IP - Name - 姓名 + 姓名 - - AE - - - - - PACS - - - - - 3D Recon - - - - - Worklist - - - - - DAQ - - - - - Port - - - - Cancel - 取消 + 取消 - Accept - 接受 + 接受 + + + + DICOM + diff --git a/src/translations/zh_CN.ts.bak b/src/translations/zh_CN.ts.bak index 40418aa..43df1f9 100644 --- a/src/translations/zh_CN.ts.bak +++ b/src/translations/zh_CN.ts.bak @@ -127,18 +127,44 @@ AccountTableForm + + + ID + + + + + + Name + 姓名 + + + + + Role + 角色 + + + + + Comment + 备注 + + Add 新增 + Edit 编辑 + Delete 删除 @@ -156,34 +182,32 @@ AdminSettingForm - + General 通用 - + Account - 账户 + 用户 - + System 系统 - + Information 信息 - - Log - 日志 + 日志 Account Manage @@ -202,10 +226,10 @@ 操作日志 - + - + About 关于 @@ -276,7 +300,7 @@ ID - 编号 + @@ -295,27 +319,30 @@ - Gender 性别 - + + Female - 女性 + - + + Male - 男性 + - + + Cancel 取消 - + + Accept 接受 @@ -350,7 +377,7 @@ GeneralForm - + Language 语言 @@ -361,17 +388,26 @@ - - + + Institution Addr 机构地址 - - Lock Screen Timeout + + Lock Screen 锁屏时间 + + Lock Screen Timeout + 锁屏时间 + + + + s + + GetAdminPsw @@ -538,7 +574,7 @@ Female - 女性 + @@ -577,41 +613,49 @@ ScanFormWidget + Protocol 扫描协议 + LEFT 左侧 + RIGHT 右侧 + Refresh 空扫 + Preview 预扫 + Stop 停止 + Scan 扫描 + Preview Parameters 预览参数 @@ -626,6 +670,7 @@ parameters + Scan Parameters 扫描参数 @@ -634,6 +679,7 @@ parameters SelectFormWidget + Account 账户 @@ -644,44 +690,58 @@ parameters + Add 新增 + Edit 编辑 + Delete 删除 + Select 选择 + Name 姓名 + Birth Date 出生日期 + Gender 性别 + Add Date 添加日期 + + + + Comment + 备注 + TabFormWidget @@ -708,88 +768,188 @@ parameters UserOperationLogForm + Log Date: 日志时间 + + dicomCfgDialog + + + Dialog + + + + DICOM Setting + DICOM 设置 + + + + DICOM Settings + DICOM 配置 + + + + + + Name + + + + + + + IP + + + + + + + Port + + + + + + + AE + + + + + Worklist + + + + + PACS + + + + + 3D Recon + + + + + Apply + 应用 + + + + Cancel + 取消 + + networkCfgDialog - + + Network Settings 网络配置 - + Address IP配置 - + IP Address IP地址 - Network Setting - 网络配置 + 网络配置 - Dynamic Address - 动态地址 + 动态地址 - + Dev 设备 - + Subnet Mask 子网掩码 - + Additional Address 额外地址 - - + + Add 新增 - - + + Edit 编辑 - - + + Delete 删除 - + Routing 路由配置 - + Default IPv4 Gateway 默认网关 - + + DHCP + + + + Routing Table 路由表 - + + Name + + + + + Port + + + + + AE + + + + + IP + + + + + DICOM + + + + Result 结果 @@ -823,90 +983,58 @@ parameters systemSettingForm - + Form - Network Setting - 网络配置 + 网络配置 - - - PushButton - - - - + Protocal 扫描协议 - + Worklist Filter Worklist过滤器 - + ... + DICOM + + + Auto Verify 自动验证 - Configure - 配置 + 配置 - + IP - Name - 姓名 + 姓名 - - AE - - - - - PACS - - - - - 3D Recon - - - - - Worklist - - - - - DAQ - - - - - Port - - - - Cancel - 取消 + 取消 - Accept - 接受 + 接受 + + + + DICOM +