#include "UiTools.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "UiConfig.h" #include "rw_zlog.h" #include "ScopeGuard.h" WidgetWithBackstageInterface::WidgetWithBackstageInterface(QWidget *parent) : QWidget(parent), m_backstageIf(nullptr) { } WidgetWithBackstageInterface::~WidgetWithBackstageInterface() { } void WidgetWithBackstageInterface::setBackstageUiinterface(BackstageInterfaceForUi* interface) { m_backstageIf = interface; } CustomDialog::CustomDialog(const QString& okBtnText, QObject *bgWidget, const QString& cancelBtnText, int timeout) : QDialog(), m_timeout(timeout) { dialogWidth = static_cast(UiConfig::GetInstance()->getUiWidth() * 0.8); dialogHeight = static_cast(UiConfig::GetInstance()->getUiHeight() * 0.2); resize(dialogWidth, dialogHeight); QPalette palette(this->palette()); hbtmLayout = new QHBoxLayout(); if("" != cancelBtnText){ m_btn_cancle = new QPushButton(this); m_btn_cancle->setFixedSize(dialogWidth / 2, dialogHeight / 4); m_btn_cancle->setText(cancelBtnText); palette.setColor(QPalette::ButtonText,QColor(92, 89, 93, 255)); m_btn_cancle->setPalette(palette); m_btn_cancle->setStyleSheet("background-color: transparent;border-top: 1px solid #DFDDEB;border-right: 1px solid #DFDDEB;"); connect(m_btn_cancle, SIGNAL(clicked(bool)), this, SLOT(slotCancleBtnClicked())); hbtmLayout->addWidget(m_btn_cancle); } if("" != okBtnText){ m_btn_ok = new QPushButton(this); m_btn_ok->setDefault(true); if("" != cancelBtnText){ m_btn_ok->setFixedSize(dialogWidth / 2, dialogHeight / 4); m_btn_ok->setStyleSheet("background-color: transparent;border-top: 1px solid #DFDDEB;border-left: 1px solid #DFDDEB;"); } else { m_btn_ok->setFixedSize(dialogWidth, dialogHeight / 4); m_btn_ok->setStyleSheet("background-color: transparent;border-top: 1px solid #DFDDEB;"); } m_btn_ok->setText(okBtnText); palette.setColor(QPalette::ButtonText,QColor(15, 116, 248, 0xFF)); m_btn_ok->setPalette(palette); connect(m_btn_ok, SIGNAL(clicked(bool)), this, SLOT(slotConfirmBtnClicked())); hbtmLayout->addWidget(m_btn_ok); } hbtmLayout->setSpacing(0); hbtmLayout->setMargin(0); if(nullptr != bgWidget){ connect(this, SIGNAL(signalShowShadowPage(bool)), bgWidget, SLOT(slotShowShadowPage(bool))); emit signalShowShadowPage(true); } if(m_timeout){ m_timer = new QTimer(this); connect(m_timer, SIGNAL(timeout()), this, SLOT(slotCancleBtnClicked()) ); m_timer->start(m_timeout); } } CustomDialog::~CustomDialog() { emit signalShowShadowPage(false); } void CustomDialog::slotCancleBtnClicked() { done(Rejected); } void CustomDialog::slotConfirmBtnClicked() { done(Accepted); } void CustomDialog::paintEvent(QPaintEvent *event) { /* //圆角 QBitmap bmp(this->size()); bmp.fill(); QPainter p(&bmp); p.setPen(Qt::NoPen); p.setBrush(Qt::black); p.drawRoundedRect(bmp.rect(),10,10); setMask(bmp); //绘制边框 QStyleOption opt; opt.initFrom(this); QPainter pr(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &pr, this);//绘制样式 */ QPainter painter(this); if(UiConfig::GetInstance()->isRkDevice()){ painter.fillRect(this->rect(), QColor(UiConfig::SUB_STYLE_COLOR_RED, UiConfig::SUB_STYLE_COLOR_GREEN, UiConfig::SUB_STYLE_COLOR_BLUE, UiConfig::SUB_STYLE_COLOR_TRAN)); } else{ painter.fillRect(this->rect(), QColor(UiConfig::MAIN_STYLE_COLOR_RED, UiConfig::MAIN_STYLE_COLOR_GREEN, UiConfig::MAIN_STYLE_COLOR_BLUE, UiConfig::MAIN_STYLE_COLOR_TRAN)); } return QWidget::paintEvent(event); } bool CustomDialog::eventFilter(QObject *watched, QEvent *event) { if( watched == this){ if(event->type() == QEvent::MouseButtonPress){ qDebug() << "CustomDialog mouse clicked"; if(m_timeout){ m_timer->start(m_timeout); } } } else{ return QWidget::eventFilter(watched, event); } return false; } bool CustomDialog::event(QEvent *event) { switch( event->type() ) { case QEvent::TouchBegin: qDebug() << "CustomDialog touch begin"; event->accept(); if(m_timeout){ m_timer->start(m_timeout); } //return true; break; case QEvent::TouchUpdate: qDebug() << "CustomDialog touch update"; event->accept(); //return true; break; case QEvent::TouchEnd: qDebug() << "CustomDialog touch end"; event->accept(); if(m_timeout){ m_timer->start(m_timeout); } //return true; break; default: break; } return QWidget::event(event); } #if 1 PasswordDialog::PasswordDialog(const QString& title, const QString& tip1, int timeout, QObject *bgWidget, const QString& pwd, const QString& tip0, const QString& okBtn, const QString& cancelBtn) : CustomDialog (okBtn, bgWidget, cancelBtn, timeout), m_bgWidget(bgWidget) { setAttribute(Qt::WA_AcceptTouchEvents); QVBoxLayout* vbLayout = new QVBoxLayout(); const int fontSize = UiConfig::GetInstance()->getGlobalFontSize(); QFont ft; QPalette palette(this->palette()); palette.setColor(QPalette::WindowText,QColor(92, 89, 93, 255)); if(!tip0.isNull()){ QLabel *labelTip0 = new QLabel(this); labelTip0->setText(tip0); ft.setPointSize(static_cast(fontSize * 0.7)); labelTip0->setFont(ft); labelTip0->setPalette(palette); vbLayout->addWidget(labelTip0, 1, Qt::AlignLeft); } QLabel *m_label_msg = new QLabel(this); m_label_msg->setText(title); ft.setPointSize(fontSize); m_label_msg->setFont(ft); vbLayout->addWidget(m_label_msg, 2, Qt::AlignCenter); QLabel *labelTip1 = new QLabel(this); labelTip1->setText(tip1); labelTip1->setPalette(palette); ft.setPointSize(static_cast(fontSize * 0.7)); labelTip1->setFont(ft); vbLayout->addWidget(labelTip1, 1, Qt::AlignCenter); m_lineEdit_pwd = new LineEditWithKeyboard(this); keyboard::GetInstance(m_lineEdit_pwd); if(!pwd.isEmpty()){ m_lineEdit_pwd->setText(pwd); } m_lineEdit_pwd->setEchoMode(QLineEdit::Password); m_lineEdit_pwd->setFixedSize(dialogWidth / 2, dialogHeight / 4); palette.setColor(QPalette::Text,QColor(92, 89, 93, 255)); //0x94, 0x9e, 0xba, 0xFF m_lineEdit_pwd->setPalette(palette); m_lineEdit_pwd->setStyleSheet("background:transparent;border-width:0;border-style:outset"); //m_lineEdit_pwd->setStyleSheet("m_lineEdit_pwd{border-bottom:1px solid #648EC9;}");//background-color: transparent; m_btn_visable = new QPushButton(this); setButtonBackImage(m_btn_visable, ":res/image/eye-close.png", 30, 30); #if 0 m_btn_factory = new QPushButton(this); m_btn_factory->setText(tr("恢复出厂")); palette.setColor(QPalette::ButtonText,QColor(0x94, 0x9e, 0xba, 0xFF)); m_btn_factory->setPalette(palette); m_btn_factory->setStyleSheet("QPushButton{background-color: transparent ;" "border:0px;border-left:1px ;border-right:1px ;border-top:1px }"); #endif QHBoxLayout* hbLayout_pwd = new QHBoxLayout(); hbLayout_pwd->addWidget(m_lineEdit_pwd); hbLayout_pwd->addWidget(m_btn_visable); hbLayout_pwd->setContentsMargins(dialogWidth / 4, 0, 0, 0); vbLayout->addLayout(hbLayout_pwd, 1); #if 0 vbLayout->addWidget(m_btn_factory, 1, Qt::AlignLeft | Qt::AlignTop); #endif vbLayout->addLayout(hbtmLayout, 1); vbLayout->setSpacing(10); vbLayout->setMargin(0); setLayout(vbLayout); setWindowTitle(tr("工程密码")); connect(m_btn_visable, SIGNAL(clicked(bool)), this, SLOT(slotPwdVisableBtnClicked())); #if 0 connect(m_btn_factory, SIGNAL(clicked(bool)), this, SLOT(slotRestoreBtnClicked())); #endif } PasswordDialog::~PasswordDialog() { } void PasswordDialog::slotPwdVisableBtnClicked() { if(m_mode){ m_lineEdit_pwd->setEchoMode(QLineEdit::Password); setButtonBackImage(m_btn_visable, ":res/image/eye-close.png", 30, 30); }else{ m_lineEdit_pwd->setEchoMode(QLineEdit::Normal); setButtonBackImage(m_btn_visable, ":res/image/eye-open.png", 30, 30); } m_mode = !m_mode; } void PasswordDialog::slotRestoreBtnClicked() { QuestionDialog dlg(tr("您确定恢复出厂设置吗?"), m_bgWidget, tr("恢复")); if(QDialog::Accepted == dlg.exec()){ qDebug() << "factory reset!"; emit signalRestoreFactory(); } } void PasswordDialog::slotConfirmBtnClicked() { m_pwd = m_lineEdit_pwd->text(); CustomDialog::slotConfirmBtnClicked(); } const QString& PasswordDialog::getPwd() const { return m_pwd; } RadioBtnChooseDialog::RadioBtnChooseDialog(const QVector& labels, QObject *bgWidget, const int choose, const QVector *config, const QString& title) : CustomDialog(tr("确定"), bgWidget), m_chooseIndex(choose) { qDebug() << "RadioBtnChooseDialog::RadioBtnChooseDialog()"; //setWindowFlag(Qt::WindowCloseButtonHint); //QPalette palette(this->palette()); //palette.setColor(QPalette::WindowText,QColor(0x0e, 0xbc, 0xf8, 0xFF)); vLayout = new QVBoxLayout(); if(title != ""){ m_label_title = new QLabel(this); m_label_title->setText(title); //m_label_title->setPalette(palette); QHBoxLayout* hLayout = new QHBoxLayout(); hLayout->addWidget(m_label_title, 1, Qt::AlignLeft); vLayout->addLayout(hLayout); } m_option_num = labels.size(); m_rdo = new QRadioButton[m_option_num]; for(int i = 0; i < m_option_num; i ++) { QWidget* widget = new QWidget(this); if(labels[i] != ""){ QLabel* label = new QLabel(this); label->setText(labels[i]); //label->setPalette(palette); widget = label; } m_rdo[i].setStyleSheet("QRadioButton::indicator:unchecked{image: url(:/res/image/select_1.png);}" "QRadioButton::indicator:checked{image: url(:/res/image/select_2.png);}"); m_rdo[i].setFocusPolicy(Qt::NoFocus); // "QRadioButton::indicator:checked{image: url(:/res/image/select_2.png);width: 30px;height: 30px;}"); connect(m_rdo + i, SIGNAL(pressed()), this, SLOT(slotRadioButtonPressed())); if(nullptr != config){ if(false == (*config)[i]){ widget->hide(); m_rdo[i].hide(); continue; } } QHBoxLayout* hLayout = new QHBoxLayout(); hLayout->addWidget(widget, 1, Qt::AlignLeft); hLayout->addWidget(m_rdo + i, 1, Qt::AlignRight); hLayout->setContentsMargins(dialogWidth / 10, dialogHeight / 10, dialogWidth / 10, dialogHeight / 10); vLayout->addLayout(hLayout); vLayout->setSpacing(0); } if(choose < m_option_num) m_rdo[choose].setChecked(true); vLayout->addLayout(hbtmLayout, 1); vLayout->setMargin(0); vLayout->setSpacing(5); setLayout(vLayout); } RadioBtnChooseDialog::~RadioBtnChooseDialog() { qDebug() << "RadioBtnChooseDialog::~RadioBtnChooseDialog()"; delete [] m_rdo; } void RadioBtnChooseDialog::slotRadioButtonPressed() { for(int i = 0; i < m_option_num; i++) { if(sender() == static_cast(m_rdo + i)) { m_chooseIndex = i; break; } } } int RadioBtnChooseDialog::getChoosedIndex() const { return m_chooseIndex; } QuestionDialog::QuestionDialog(const QString& question, QObject *bgWidget, const QString& btnText) : CustomDialog(btnText, bgWidget) { QLabel* labelQues = new QLabel(this); labelQues->setWordWrap(true); labelQues->setText(question); QVBoxLayout* vLayout = new QVBoxLayout(); vLayout->addWidget(labelQues, 90, Qt::AlignCenter); vLayout->addLayout(hbtmLayout); vLayout->setSpacing(dialogHeight / 5); vLayout->setContentsMargins(0, dialogHeight / 10, 0, 0); setLayout(vLayout); } InfoDialog::InfoDialog(const QString& info, QObject *bgWidget, const QString& btnText, int timeout) : CustomDialog(btnText, bgWidget, "", timeout) { QLabel* labelInfo = new QLabel(this); labelInfo->setWordWrap(true); labelInfo->setText(info); QVBoxLayout* vLayout = new QVBoxLayout(); vLayout->addWidget(labelInfo, 90, Qt::AlignCenter); vLayout->addLayout(hbtmLayout); vLayout->setSpacing(dialogHeight / 5); vLayout->setContentsMargins(0, dialogHeight / 10, 0, 0); setLayout(vLayout); } SliderDialog::SliderDialog(int current, int min, int max, const QString& tip, QObject *bgWidget) : CustomDialog (tr("确定"), bgWidget) { m_labelCurrent = new QLabel(this); m_labelCurrent->setText(QString::number(current)); QLabel* labelMin = new QLabel(this); labelMin->setText(QString::number(min)); QLabel* labelMax = new QLabel(this); labelMax->setText(QString::number(max)); m_slider = new QSlider(this); m_slider->setOrientation(Qt::Horizontal); m_slider->setMinimumHeight(UiConfig::GetInstance()->isRkDevice() ? 44 :60); m_slider->setMinimum(min); m_slider->setMaximum(max); m_slider->setValue(current); //m_slider->setSingleStep(10); //m_slider->setGeometry(30,this->height()-28,200,25); m_slider->setStyleSheet("QSlider::handle:horizontal{width:48px;background-color:rgb(255,255,255);margin:-22px 0px -22px 0px;border-radius:24px;}" "QSlider::groove:horizontal{height:4px;background-color:rgb(219,219,219);}" "QSlider::add-page:horizontal{background-color:rgb(219,219,219);}" "QSlider::sub-page:horizontal{background-color:rgb(26,217,110);}"); QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; effect->setOffset(4,4); effect->setColor(QColor(0,0,0,50)); effect->setBlurRadius(10); m_slider->setGraphicsEffect(effect); connect(m_slider, SIGNAL(valueChanged(int)), this, SLOT(slotValueChanged(int))); QHBoxLayout* hLayout = new QHBoxLayout(); hLayout->addWidget(labelMin, 1); hLayout->addWidget(m_slider, 30); hLayout->addWidget(labelMax, 1); hLayout->setMargin(20); hLayout->setSpacing(10); QLabel* m_labelTip = new QLabel(this); m_labelTip->setText(tip); QPalette palette(this->palette()); palette.setColor(QPalette::WindowText,QColor(92, 89, 93, 255)); m_labelTip->setPalette(palette); #if 0 QFont ft; ft.setPointSize(static_cast(15)); m_labelTip->setFont(ft); #endif QVBoxLayout* vbLayout = new QVBoxLayout(); vbLayout->addWidget(m_labelCurrent, 3, Qt::AlignCenter); vbLayout->addLayout(hLayout, 7); vbLayout->addWidget(m_labelTip, 1, Qt::AlignCenter); vbLayout->addLayout(hbtmLayout, 2); vbLayout->setSpacing(10); vbLayout->setMargin(0); setLayout(vbLayout); //setWindowTitle(tr("音量设置")); m_iCurrent = current; }; SliderDialog::~SliderDialog() { } void SliderDialog::slotValueChanged(int value) { m_iCurrent = value; m_labelCurrent->setText(QString::number(value)); } int SliderDialog::getValueSet() const { return m_iCurrent; } DateTimeDialog::DateTimeDialog(const QDateTime& dateTime, QObject *bgWidget, bool needDate, bool needTime) : CustomDialog (tr("确定"), bgWidget) { m_dateTimeSet = new QDateTimeEdit(this); m_dateTimeSet->setDateTime(QDateTime::currentDateTime()); //m_dateTimeSet->setCalendarPopup(true); QString format; if(needDate){ format += "yyyy-MM-dd"; } if(needTime){ format += needDate ? " " : ""; format += "HH:mm"; } m_dateTimeSet->setDisplayFormat(format); m_dateTimeSet->setFixedSize(static_cast(dialogWidth * 0.8), static_cast(dialogHeight * 0.5)); m_dateTimeSet->setFrame(false); m_dateTimeSet->setAlignment(Qt::AlignCenter); QFont ft; //ft.setPointSize(static_cast(dialogWidth * 0.05)); ft.setPointSize(static_cast(m_dateTimeSet->font().pointSize() * 1.4)); m_dateTimeSet->setFont(ft); m_dateTimeSet->setDateTime(dateTime); /* m_dateTimeSet->setStyleSheet("QDateTimeEdit::up-button,QTimeEdit::up-button,QDoubleSpinBox::up-button,QSpinBox::up-button" "{subcontrol-origin:border;subcontrol-position:right;image: url(:res/image/up.png);};" "QDateTimeEdit::down-button,QTimeEdit::down-button,QDoubleSpinBox::down-button,QSpinBox::down-button" "{subcontrol-origin:border;subcontrol-position:left;image: url(:res/image/down.png); }"); m_dateTimeSet->setStyleSheet("QDateTimeEdit::up-button{background-image:url(:res/image/up.png);width: 55px;height: 40px;}" "QDateTimeEdit::down-button{background-image:url(:res/image/down.png);width: 55px;height: 40px;}"); */ m_dateTimeSet->setStyleSheet("background-color:transparent;"); QLabel* m_labelTip = new QLabel(this); m_labelTip->setText(tr("点击对应时间项设置")); QPalette palette(this->palette()); palette.setColor(QPalette::WindowText,QColor(92, 89, 93, 255)); m_labelTip->setPalette(palette); QVBoxLayout* vbLayout = new QVBoxLayout(); vbLayout->addWidget(m_dateTimeSet, 3, Qt::AlignCenter); vbLayout->addWidget(m_labelTip, 1, Qt::AlignCenter); vbLayout->addLayout(hbtmLayout, 2); vbLayout->setSpacing(10); vbLayout->setMargin(0); setLayout(vbLayout); m_dateTimeSet->setCurrentSectionIndex(0); } QDateTime DateTimeDialog::getValueSet() const { return m_dataTimeVal; } void DateTimeDialog::slotConfirmBtnClicked() { m_dataTimeVal = m_dateTimeSet->dateTime(); CustomDialog::slotConfirmBtnClicked(); } void LineEditInputDialog::init(const QStringList& labels) { //setWindowFlag(Qt::WindowCloseButtonHint); //QPalette palette(this->palette()); //palette.setColor(QPalette::WindowText,QColor(0x0e, 0xbc, 0xf8, 0xFF)); vLayout = new QVBoxLayout(); formLayout = new QFormLayout(); m_rowNum = labels.size(); qDebug() << "row num:" << m_rowNum; m_editRow = new LineEditWithKeyboard[m_rowNum]; m_stringRowInput = new QString[m_rowNum]; for(int i = 0; i < m_rowNum; i ++){ QLabel* rowLabel = new QLabel(this); rowLabel->setText(labels[i]); //rowLabel->setPalette(palette); m_editRow[i].setStyleSheet("QLineEdit{border-bottom:1px solid #648EC9;}"); //palette.setColor(QPalette::Text,QColor(0x0e, 0xbc, 0xf8, 0xFF)); //m_editRow[i].setPalette(palette); //m_editRow[i].setStyleSheet("QLineEdit{background-color: transparent ;border:2px solid #0ebcf8;}"); formLayout->addRow(rowLabel, m_editRow + i); } //formLayout->setSpacing(30); formLayout->setContentsMargins(30, 50, 30, 30); vLayout->addLayout(formLayout, 8); vLayout->addLayout(hbtmLayout, 1); vLayout->setMargin(0); vLayout->setSpacing(10); setLayout(vLayout); move((UiConfig::GetInstance()->getUiWidth() - dialogWidth) / 2, UiConfig::GetInstance()->getUiHeight() / 3); } LineEditInputDialog::LineEditInputDialog(const QStringList& labels, QObject *bgWidget, const QString& confirBtm) : CustomDialog(confirBtm, bgWidget), m_rowNum(0) { qDebug() << "LineEditInputDialog::LineEditInputDialog()"; init(labels); } LineEditInputDialog::LineEditInputDialog(const QString& label, QObject *bgWidget, const QString& confirBtm) : CustomDialog(confirBtm, bgWidget), m_rowNum(0) { qDebug() << "LineEditInputDialog()"; QList labels = QList() << label; init(labels); } LineEditInputDialog::~LineEditInputDialog() { qDebug() << "~LineEditInputDialog()"; delete []m_editRow; delete []m_stringRowInput; } QString LineEditInputDialog::getRow(const int row) const { return (row < m_rowNum ? m_stringRowInput[row] : ""); } void LineEditInputDialog::fillRow(const int row, const QString& str, bool readOnly) { if(row < m_rowNum){ m_editRow[row].setText(str); if(readOnly){ m_editRow[row].setEnabled(false); //m_editRow[row].setReadOnly(readOnly); } } } void LineEditInputDialog::slotConfirmBtnClicked() { for(int i = 0; i < m_rowNum; i ++) { m_stringRowInput[i] = m_editRow[i].text(); } CustomDialog::slotConfirmBtnClicked(); } ComSelectDialog::ComSelectDialog(const QStringList& titles, const QVector& sels, QObject *bgWidget, const QString& confirBtm) : CustomDialog(confirBtm, bgWidget), m_rowNum(0) { qDebug() << "ComSelectDialog()"; vLayout = new QVBoxLayout(); formLayout = new QFormLayout(); m_rowNum = titles.size(); qDebug() << "row num:" << m_rowNum; for(int i = 0; i < m_rowNum; i ++){ QComboBox* cbSel = new QComboBox(this); m_cbSels.push_back(cbSel); formLayout->addRow(titles.at(i), cbSel); if(i < sels.size()){ for(const auto& sel : sels.at(i)){ cbSel->addItem(sel); } } } //formLayout->setSpacing(30); formLayout->setContentsMargins(30, 50, 30, 30); vLayout->addLayout(formLayout, 8); vLayout->addLayout(hbtmLayout, 1); vLayout->setMargin(0); vLayout->setSpacing(10); setLayout(vLayout); move((UiConfig::GetInstance()->getUiWidth() - dialogWidth) / 2, UiConfig::GetInstance()->getUiHeight() / 3); } ComSelectDialog::~ComSelectDialog() { qDebug() << "~ComSelectDialog()"; } int ComSelectDialog::getRow(int row) const { return (row < m_rowNum ? m_cbSels.at(row)->currentIndex() : -1); } void ComSelectDialog::setRow(int row, int set, bool readOnly) { if(row < m_rowNum && set < m_cbSels.at(row)->count()){ m_cbSels[row]->setCurrentIndex(set); if(readOnly){ m_cbSels[row]->setEnabled(false); } } } MsgDialog::MsgDialog(const QString& msg, QObject *bgWidget) : CustomDialog("", bgWidget, "") { QLabel* labelInfo = new QLabel(this); labelInfo->setText(msg); QVBoxLayout* vLayout = new QVBoxLayout(); vLayout->addWidget(labelInfo, 90, Qt::AlignCenter); vLayout->setMargin(0); setLayout(vLayout); } void IpInputDialog::slotTextChanged(const QString & t) { const QObject* send = sender(); for(int i=0; i 255){ InfoDialog(QObject::tr("请指定一个介于0和255之间的值")).exec(); list[j] = "255"; m_editRow[i].setText(list[0] + "." + list[1] + "." + list[2] + "." + list[3]); QString posiStr; for(int k=0; k& items, int choose, QWidget *parent) : SettingUiPage(items, parent), m_chooseIndex(choose) { #if 0 const QString QSS_VerticalScrollBar( "" "QScrollBar:vertical{" //垂直滑块整体 "min-width:55px;" "background:rgba(255, 255, 255, 1);" //背景色 #FFFFFF "padding-top:0px;" //上预留位置(放置向上箭头) "padding-bottom:0px;" //下预留位置(放置向下箭头) "padding-left:0px;" //左预留位置(美观) "padding-right:0px;" //右预留位置(美观) "border-left:0px solid grey;}"//左分割线 #d7d7d7 "QScrollBar::handle:vertical{"//滑块样式 "background:rgba(219, 219, 219, 1);" //滑块颜色 "border-radius:4px;" //边角圆润 "}" //滑块最大高度max-height:20px; "QScrollBar::handle:vertical:hover{"//鼠标触及滑块样式 "background:rgba(219, 219, 219, 1);}" //滑块颜色 "QScrollBar::add-line:vertical{"//向下箭头样式 "background:url(:res/image/down.png) center no-repeat;}" "QScrollBar::sub-line:vertical{"//向上箭头样式 "background:url(:res/image/up.png) center no-repeat;}" ""); m_listWidget->verticalScrollBar()->setStyleSheet(QSS_VerticalScrollBar); #else m_listWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); #endif m_listWidget->setCurrentRow(m_chooseIndex); QScroller::grabGesture(m_listWidget, QScroller::LeftMouseButtonGesture); m_listWidget->setVerticalScrollMode(QListWidget::ScrollPerPixel); QString style = styleSheet() + "background:rgb("; style += QString::number(UiConfig::SUB_STYLE_COLOR_RED); style += ", "; style += QString::number(UiConfig::SUB_STYLE_COLOR_GREEN); style += ", "; style += QString::number(UiConfig::SUB_STYLE_COLOR_BLUE); style += ");}"; m_listWidget->setStyleSheet(style); } void ItemChoosePage::slotItemClicked(QListWidgetItem* item) { myListWidget* wdtPre = dynamic_cast(m_listWidget->itemWidget(m_listWidget->item(m_chooseIndex))); if(wdtPre == nullptr){ return; } wdtPre->updateIcon(""); myListWidget* wdt = dynamic_cast(m_listWidget->itemWidget(item)); if(wdt == nullptr){ return; } wdt->updateIcon(":/res/image/select_2.png"); m_chooseIndex = m_listWidget->currentRow(); } int ItemChoosePage::getChoosedIndex() const { return m_chooseIndex; } ItemChooseDialog::ItemChooseDialog(const QVector& items, int choose, QObject *bgWidget) : CustomDialog(tr("确定"), bgWidget) { QVector opns; int i = 0; for(auto &item : items){ opns.append(ItemChoosePage::SetOpn(item, "", i == choose ? myListWidget::enProperty::enPropertyTick : myListWidget::enProperty::enPropertyNull)); i++; } m_ItemsPage = new ItemChoosePage(opns, choose, this); m_ItemsPage->setFixedSize(width(), static_cast(UiConfig::GetInstance()->getUiHeight() * 0.8)); vLayout = new QVBoxLayout(); vLayout->addWidget(m_ItemsPage, 100, Qt::AlignTop); vLayout->addLayout(hbtmLayout, 1); vLayout->setMargin(0); vLayout->setSpacing(0); setLayout(vLayout); resize(width(), static_cast(UiConfig::GetInstance()->getUiHeight() * 0.8)); } ItemChooseDialog::~ItemChooseDialog() { } int ItemChooseDialog::getChoosedIndex() const { return m_ItemsPage->getChoosedIndex(); } CalendarDialog::CalendarDialog(bool isEn, QObject *bgWidget) : CustomDialog (tr("确定"), bgWidget) { m_wgtCal = new QCalendarWidget(this); m_wgtCal->setFixedWidth(dialogWidth); m_wgtCal->adjustSize(); qDebug() << "isEn:" << isEn; m_wgtCal->setLocale(isEn ? QLocale::English : QLocale::Chinese); m_wgtCal->setVerticalHeaderFormat(QCalendarWidget::NoVerticalHeader); m_wgtCal->setSelectedDate(QDate::currentDate()); QVBoxLayout* vbLayout = new QVBoxLayout(); vbLayout->addWidget(m_wgtCal, 3, Qt::AlignCenter); vbLayout->addLayout(hbtmLayout, 2); vbLayout->setSpacing(10); vbLayout->setMargin(0); setLayout(vbLayout); } QDate CalendarDialog::getDateChoose() const { return m_date; } void CalendarDialog::slotConfirmBtnClicked() { m_date = m_wgtCal->selectedDate(); CustomDialog::slotConfirmBtnClicked(); } LineEditWithDialog::LineEditWithDialog(int dialogType, QObject *bgWidget, QWidget *parent) : QLineEdit(parent), m_dialogType(dialogType), m_bgWidget(bgWidget) { } LineEditWithDialog::~LineEditWithDialog() {qDebug() << "~LineEditWithDialog";} void LineEditWithDialog::mousePressEvent(QMouseEvent *event) { qDebug() << "LineEditWithDialog::mousePressEvent"; QLineEdit::mousePressEvent(event); switch(m_dialogType) { case 0: { CalendarDialog cal(0 != UiConfig::GetInstance()->getLanguageType(), m_bgWidget); cal.setFocus(); cal.setFocusPolicy(Qt::StrongFocus); if(cal.exec() == QDialog::Accepted) { setText(cal.getDateChoose().toString("yyyy-MM-dd")); } } break; default: break; } } #endif MyMessageBox::MyMessageBox() { //设置按钮背景色和字体颜色 //setStyleSheet("QPushButton { background-color: rgb(15, 188, 248); color: rgb(85, 255, 0);}"); setStyleSheet("QPushButton { background-color: rgb(15, 188, 248);}"); } void MyMessageBox::showEvent(QShowEvent* event) { QWidget *textField = findChild("qt_msgBoxbox_label"); if(textField != nullptr) { textField -> setMinimumSize(200, 50);//可设置消息对话框大小,默认太小 } QMessageBox::showEvent(event); } void MyMessageBox::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.fillRect(this->rect(), QColor(0x18, 0x1f, 0x33,/*0x1f, 0x28, 0x41,*/ 255)); //QColor最后一个参数代表背景的透明度 return QWidget::paintEvent(event); } void setLineEditFontColor(QLineEdit* edit, const QColor& color) { QPalette p = edit->palette(); p.setColor(QPalette::Active, QPalette::Text, color); p.setColor(QPalette::Inactive, QPalette::Text, color); edit->setPalette(p); } void setLineEditStyle(QLineEdit* edit) { edit->setReadOnly(true); edit->setFrame(false); edit->setMaximumWidth(100); QPalette p = edit->palette(); p.setColor(QPalette::Active, QPalette::Base, Qt::lightGray); p.setColor(QPalette::Inactive, QPalette::Base, Qt::lightGray); edit->setPalette(p); //edit->setText("xxxx"); edit->setAlignment(Qt::AlignCenter); } void setButtonBackImage(QPushButton *button, const QString image, int sizeW, int sizeH) { QPixmap pixmap(image); if(sizeW !=0 && sizeH != 0){ pixmap=pixmap.scaled(163,163).scaled(sizeW, sizeH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); button->setIconSize(QSize(sizeW, sizeH)); } button->setIcon(QIcon(pixmap)); button->setFlat(true); button->setStyleSheet("border: 0px"); button->setCursor(QCursor(Qt::PointingHandCursor)); button->setFocusPolicy(Qt::NoFocus); } QListWidgetItem* setListWidgetItem(QListWidgetItem* item, const QString text, const QString image) { if(text != "") item->setText(text); if(image != "") item->setIcon(QIcon(image)); item->setSizeHint(QSize(120, 90)); item->setTextAlignment(Qt::AlignCenter); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); return item; } myListWidget::myListWidget(const SetOpnCfg& cfg, QWidget* parent) : QWidget(parent) { if(cfg.m_sOpn != "" || cfg.m_sVal != "" || cfg.m_prop != myListWidget::enPropertyNull) { m_hbLayout = new QHBoxLayout(); if(enProperty::enPropertyIndent1 & cfg.m_prop){ m_hbLayout->addSpacing(UiConfig::GetInstance()->getUiWidth() / 20); m_layoutObjQty++; m_hasIndent = true; } m_label_leftIcon = new QLabel(this); m_layoutObjQty++; m_label_left = new QLabel(this); m_layoutObjQty++; m_label_left->setText(cfg.m_sOpn); if(enProperty::enPropertyRedWord & cfg.m_prop){ m_label_left->setStyleSheet("color:red;font-size:30px;"); }else { m_label_left->setStyleSheet("color:black;font-size:30px;");//background-color: rgb(225, 225, 225); } m_hbLayout->addWidget(m_label_left, 20, Qt::AlignLeft); m_label_right = new QLabel(this); m_layoutObjQty++; m_label_right->setText(cfg.m_sVal); m_label_right->setStyleSheet("color:gray;font-size:30px;"); m_hbLayout->addWidget(m_label_right, 1, Qt::AlignRight); m_label_icon = new QLabel(this); m_layoutObjQty++; QPixmap pm; QString icon; if(enPropertySwitch & cfg.m_prop){ icon = ":/res/image/off.png"; pm.load(icon); }else if(enProperty::enPropertyMoreArrow & cfg.m_prop){ icon = ":/res/image/pageNext.png"; pm.load(icon); //pm = pm.scaled(30, 40, Qt::KeepAspectRatio); }else if(enProperty::enPropertyTick & cfg.m_prop){ icon = ":/res/image/select_2.png"; pm.load(icon); } m_label_icon->setPixmap(pm); m_hbLayout->addWidget(m_label_icon, 1, Qt::AlignRight); m_hbLayout->setContentsMargins(20, 20, 40, 20); setLayout(m_hbLayout); } else{ setEnabled(false); } } void myListWidget::updateLabel(const QString& val) { if(m_label_right) m_label_right->setText(val); } void myListWidget::setLeftIcon(const QString& icon, int scale_w, int scale_h) { QPixmap pm(icon); if(0!=scale_w && 0!=scale_h){ pm = pm.scaled(scale_w, scale_h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); } m_label_leftIcon->setPixmap(pm); qDebug() << "before m_hbLayout->count():" << m_hbLayout->count(); if(m_hbLayout->count() < m_layoutObjQty){ m_hbLayout->insertWidget(m_hasIndent ? 1 : 0, m_label_leftIcon, 1, Qt::AlignLeft); } qDebug() << "after m_hbLayout->count():" << m_hbLayout->count(); } void myListWidget::updateIcon(const QString& icon, int scale_w, int scale_h) { if(m_label_icon){ QPixmap pm(icon); //pm = pm.scaled(40, 40, Qt::KeepAspectRatio); if(0!=scale_w && 0!=scale_h){ pm = pm.scaled(scale_w, scale_h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); } m_label_icon->setPixmap(pm); } } myListWidget::~myListWidget() { //qDebug() << "~myListWidget()"; } const QString myListWidget::getLabelString() const { return m_label_right->text(); } const QString myListWidget::getOpnLabelString() const { return m_label_left->text(); } const QString myListWidget::getOptionLabel() const { return m_label_left->text(); } void setLanguage(QApplication& app, const QString& languageFile) { static QTranslator m_translator; do{ if(languageFile.contains(".qm")){ //m_translator->load(":/res/language/A038_TC.qm"); m_translator.load(languageFile); } else { break; } if(!m_translator.isEmpty()) { app.installTranslator(&m_translator); } else { qDebug() << "language is empty!"; } }while(0); } void setFont(QApplication& app, const QString& ttf, const int fontSize, const int nLanguageType) { QString fontFile = ttf; if(6 == nLanguageType){//泰文 fontFile += "thai.ttf"; } else { fontFile += "DroidSansFallback.ttf";//中文 } int id = QFontDatabase::addApplicationFont(fontFile); QFontDatabase::addApplicationFont(ttf + "pingfang.ttf"); QString msyh = QFontDatabase::applicationFontFamilies (id).at(0); QFont font(msyh, fontSize); //8 //qDebug()<setMinimumSize(btnWidth, btnWidth); //圆角 pPushButton->setStyleSheet("background-color: rgb(255, 255, 255);border-radius:10px;padding:2px 4px;focus{outline: none;}"); //"{background-color:#FF0000;border-radius:4px;text-align: bottom;color:#000000;}" _pVBoxLayoutDevice = new QVBoxLayout(pPushButton); _pLabelIcon = new QLabel(pPushButton); QPixmap pm(icon); if(UiConfig::GetInstance()->isRkDevice()){ //pm = pm.scaledToWidth(btnWidth / 3, Qt::SmoothTransformation); pm = pm.scaled(btnWidth / 3.5, btnWidth / 3.5, Qt::KeepAspectRatio); //TODO, special for rk right now } else{ pm = pm.scaled(btnWidth / 3, btnWidth / 3, Qt::KeepAspectRatio); } _pLabelIcon->setPixmap(pm); _pVBoxLayoutDevice->addWidget(_pLabelIcon, 2, Qt::AlignCenter); QLabel *btmName = new QLabel(pPushButton); btmName->setText(tip); _pVBoxLayoutDevice->addWidget(btmName, 1, Qt::AlignCenter); _pVBoxLayoutDevice->setAlignment(Qt::AlignCenter); pPushButton->setFocusPolicy(Qt::NoFocus); } setPushButton::~setPushButton() { } MyWidgetWithSubStyleColor::MyWidgetWithSubStyleColor(QWidget *parent) : WidgetWithBackstageInterface(parent) { #if 0 setCursor(QCursor(Qt::BlankCursor)); #endif } void MyWidgetWithSubStyleColor::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.fillRect(this->rect(), QColor(UiConfig::SUB_STYLE_COLOR_RED, UiConfig::SUB_STYLE_COLOR_GREEN, UiConfig::SUB_STYLE_COLOR_BLUE, UiConfig::SUB_STYLE_COLOR_TRAN)); //QColor最后一个参数代表背景的透明度 return QWidget::paintEvent(event); } MyWidgetWithMainStyleColor::MyWidgetWithMainStyleColor(QWidget *parent) : WidgetWithBackstageInterface(parent) { #if 0 setCursor(QCursor(Qt::BlankCursor)); #endif } void MyWidgetWithMainStyleColor::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.fillRect(this->rect(), QColor(UiConfig::MAIN_STYLE_COLOR_RED, UiConfig::MAIN_STYLE_COLOR_GREEN, UiConfig::MAIN_STYLE_COLOR_BLUE, UiConfig::MAIN_STYLE_COLOR_TRAN)); //QColor最后一个参数代表背景的透明度 return QWidget::paintEvent(event); } PageAcceptMouseAndTouch::PageAcceptMouseAndTouch(QWidget *parent) : WidgetWithBackstageInterface(parent) { setAttribute(Qt::WA_AcceptTouchEvents); //touch installEventFilter(this); //mouse click #if 0 setCursor(QCursor(Qt::BlankCursor)); #endif } bool PageAcceptMouseAndTouch::eventFilter(QObject *watched, QEvent *event) { if( watched == this){ if(event->type() == QEvent::MouseButtonPress){ qDebug() << "mouse clicked"; } } else{ return QWidget::eventFilter(watched, event); } return false; } bool PageAcceptMouseAndTouch::event(QEvent *event) { #if 0 switch( event->type() ) { case QEvent::TouchBegin: qDebug() << "touch begin"; event->accept(); return true; case QEvent::TouchUpdate: event->accept(); return true; case QEvent::TouchEnd: qDebug() << "touch end"; event->accept(); return true; default: break; } #endif return QWidget::event(event); } TimerUpdate::TimerUpdate(QLabel *pLabel, QWidget *parent) : QWidget(parent), _labelTime(pLabel), _labelDate(nullptr), m_timeType(0), m_dateType(0), m_weekType(0) { _timerID = startTimer(500); } TimerUpdate::TimerUpdate(QLabel* labelTime, QLabel* labelDate, QWidget *parent, int timeType, int dateType, int weekType) : QWidget(parent), _labelTime(labelTime), _labelDate(labelDate), m_timeType(timeType), m_dateType(dateType), m_weekType(weekType) { _timerID = startTimer(500); } TimerUpdate::~TimerUpdate() { if(0 != _timerID){ killTimer(_timerID); } } void TimerUpdate::timerEvent(QTimerEvent *event) { if(event->timerId() == _timerID) { const QDateTime dateTime = QDateTime::currentDateTime(); const QString time = dateTime.toString("hh:mm:ss"); if(time == "00:00:00"){ emit signalNewDay(); } if(!m_enableUpdate){ //qDebug() << "dont update"; return; } if(_labelTime){ QString timeStr; if(0 == m_timeType){ timeStr = time.left(5); }else if(1 == m_timeType){ timeStr = time; } if(_labelTime->text() != timeStr){ _labelTime->setText(timeStr); #if 1 if(UiConfig::GetInstance()->isRkDevice()){ if(parent()){ dynamic_cast(parent())->update(); } if(parent()->parent()){ dynamic_cast(parent()->parent())->update(); } } #endif } } if(_labelDate){ QString dateStr; if(0 == m_dateType){ dateStr = dateTime.toString("yyyy/MM/dd "); }else if(1 == m_dateType){ dateStr = dateTime.toString("yyyy-MM-dd "); } if(1 == m_weekType){ dateStr += dateTime.toString("ddd"); }else if(2 == m_weekType){ QLocale locale = QLocale::Chinese; dateStr += locale.toString(dateTime, "ddd"); } if(_labelDate->text() != dateStr){ _labelDate->setText(dateStr); #if 1 if(UiConfig::GetInstance()->isRkDevice()){ if(parent()){ dynamic_cast(parent())->update(); } if(parent()->parent()){ dynamic_cast(parent()->parent())->update(); } } #endif } } } } void TimerUpdate::enableUpdate(bool enable) { m_enableUpdate = enable; } QPixmap PixmapToRound(QPixmap &src, int radius) { if (src.isNull()) { return QPixmap(); } QSize size(2*radius, 2*radius); QBitmap mask(size); QPainter painter(&mask); painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::SmoothPixmapTransform); painter.fillRect(0, 0, size.width(), size.height(), Qt::white); painter.setBrush(QColor(0, 0, 0)); painter.drawRoundedRect(0, 0, size.width(), size.height(), 99, 99); QPixmap image = src.scaled(size); image.setMask(mask); return image; } MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent) { } MyLineEdit::~MyLineEdit() { } void MyLineEdit::mousePressEvent(QMouseEvent *event) { if( event->button() == Qt::LeftButton ) { emit clicked(); } } QImage ScaleImage(const QImage& image, const QSize& size) { double dWidthRatio = 1.0 * image.size().width() / size.width(); double dHeightRatio = 1.0 * image.size().height() / size.height(); return dWidthRatio>dHeightRatio ? image.scaledToWidth(size.width(), Qt::SmoothTransformation) : image.scaledToHeight(size.height(), Qt::SmoothTransformation); } QImage ScaleImage2Label(const QImage& qImage, const QLabel& label) { return ScaleImage(qImage, label.size()); } QPixmap ScalePixmap(const QPixmap& pixmap, const QSize& size) { #if 0 return QPixmap::fromImage(ScaleImage(QImage(pixmap.toImage()), size)); #else double dWidthRatio = 1.0 * pixmap.size().width() / size.width(); double dHeightRatio = 1.0 * pixmap.size().height() / size.height(); return dWidthRatio>dHeightRatio ? pixmap.scaledToWidth(size.width(), Qt::SmoothTransformation) : pixmap.scaledToHeight(size.height(), Qt::SmoothTransformation); #endif } QPixmap ScalePixmap2Label(const QPixmap& pixmap, const QLabel& label) { return ScalePixmap(pixmap, label.size()); } FourListWidget::FourListWidget(const QString &left, const QString &right, const QString &btnText, const QString &icon, QWidget *parent) : QWidget(parent) { QHBoxLayout* hbLayout = new QHBoxLayout(); m_label_left = new QLabel(this); m_label_left->setText(left); m_label_left ->setStyleSheet("color:white"); //background-color: rgb(250, 0, 0); font-size:60px; hbLayout->addWidget(m_label_left, 20, Qt::AlignLeft); m_label_right = new QLabel(this); m_label_icon = new QLabel(this); m_btn_mid = new QPushButton(this); QPixmap pm(icon); if(right != QString("")) { m_label_right->setText(right); m_label_right ->setStyleSheet("color:white"); hbLayout->addWidget(m_label_right, 1, Qt::AlignRight); pm = pm.scaled(20, 20, Qt::KeepAspectRatio); } else { pm = pm.scaled(40, 40, Qt::KeepAspectRatio); } m_label_icon->setPixmap(pm); m_btn_mid->setObjectName("pushbutton_test"); m_btn_mid->setStyleSheet("#pushbutton_test{background-color: #0ebcf8;color: #FFFFFF}"); m_btn_mid->setText(btnText); hbLayout->addWidget(m_btn_mid, 1, Qt::AlignRight); hbLayout->addWidget(m_label_icon, 1, Qt::AlignRight); hbLayout->setMargin(1); setLayout(hbLayout); } FourListWidget::~FourListWidget() { if(nullptr != m_label_left) { delete m_label_left; m_label_left = nullptr; } if(nullptr != m_label_right) { delete m_label_right; m_label_right = nullptr; } if(nullptr != m_label_icon) { delete m_label_icon; m_label_icon = nullptr; } if(nullptr != m_btn_mid) { delete m_btn_mid; m_btn_mid = nullptr; } } void FourListWidget::updateLabel(const QString &label) { if(m_label_right) m_label_right->setText(label); } void FourListWidget::updateBtnText(const QString &text) { if(m_btn_mid) { m_btn_mid->setText(text); } } QPushButton *FourListWidget::getPushButton() { return m_btn_mid; } const QString FourListWidget::getLabelString() const { return m_label_right->text(); } SwitchListWidget::SwitchListWidget(const QString &left, const QString &right, const QString &icon, QWidget *parent) { Q_UNUSED(parent); QHBoxLayout* hbLayout = new QHBoxLayout(); m_label_left = new QLabel(this); m_label_left->setText(left); m_label_left ->setStyleSheet("color:white"); //background-color: rgb(250, 0, 0); font-size:60px; hbLayout->addWidget(m_label_left, 20, Qt::AlignLeft); m_label_right = new QLabel(this); m_label_icon = new QLabel(this); QPixmap pm(icon); if(right != QString("")) { m_label_right->setText(right); m_label_right ->setStyleSheet("color:white"); hbLayout->addWidget(m_label_right, 1, Qt::AlignRight); pm = pm.scaled(20, 20, Qt::KeepAspectRatio); } else { pm = pm.scaled(30, 30, Qt::KeepAspectRatio); } m_label_icon->setPixmap(pm); hbLayout->addWidget(m_label_icon, 1, Qt::AlignRight); hbLayout->setMargin(1); setLayout(hbLayout); } SwitchListWidget::~SwitchListWidget() { } void SwitchListWidget::updateLabel(const QString &label) { if(m_label_right) m_label_right->setText(label); } void SwitchListWidget::updateIcon(const QString& icon) { if(m_label_icon) { QPixmap pm(icon); pm = pm.scaled(30, 30, Qt::KeepAspectRatio); m_label_icon->setPixmap(pm); } } void SwitchListWidget::updateIcon(bool bFlag) { if(m_label_icon) { QPixmap pm(bFlag ? ":/res/image/on.png" : ":/res/image/off.png"); pm = pm.scaled(30, 30, Qt::KeepAspectRatio); m_label_icon->setPixmap(pm); m_Res = bFlag; } } bool SwitchListWidget::getSwitchRes() { return m_Res; } const QString SwitchListWidget::getLabelString() const { return m_label_right->text(); } LocalFourListWidget::LocalFourListWidget(const QString& left, const QString& mid, const QString& right, const QString& icon, QWidget*parent) : QWidget(parent) { QHBoxLayout* hbLayout = new QHBoxLayout(); m_label_left = new QLabel(this); m_label_left->setText(left); m_label_left ->setStyleSheet("color:white"); //background-color: rgb(250, 0, 0); font-size:60px; hbLayout->addWidget(m_label_left, 20, Qt::AlignLeft); m_label_mid = new QLabel(this); m_label_mid->setText(mid); m_label_mid ->setStyleSheet("color:white"); hbLayout->addWidget(m_label_mid, 1, Qt::AlignRight); m_label_right = new QLabel(this); m_label_right->setText(right); m_label_right ->setStyleSheet("color:white"); hbLayout->addWidget(m_label_right, 1, Qt::AlignRight); m_label_icon = new QLabel(this); if(!icon.isEmpty()) { QPixmap pm(icon); pm = pm.scaled(20, 20, Qt::KeepAspectRatio); m_label_icon->setPixmap(pm); hbLayout->addWidget(m_label_icon, 1, Qt::AlignRight); } hbLayout->setMargin(1); setLayout(hbLayout); } LocalFourListWidget::~LocalFourListWidget() { if(nullptr != m_label_left) { delete m_label_left; m_label_left = nullptr; } if(nullptr != m_label_mid) { delete m_label_mid; m_label_mid = nullptr; } if(nullptr != m_label_right) { delete m_label_right; m_label_right = nullptr; } if(nullptr != m_label_icon) { delete m_label_icon; m_label_icon = nullptr; } } void LocalFourListWidget::updateLabel(const QString &label) { if(m_label_mid) m_label_mid->setText(label); } void LocalFourListWidget::updateRight(const QString &text) { if(m_label_right) { m_label_right->setText(text); } } void LocalFourListWidget::updateIcon(const QString& icon) { if(m_label_icon) { QPixmap pm(icon); pm = pm.scaled(30, 30, Qt::KeepAspectRatio); m_label_icon->setPixmap(pm); } } const QString LocalFourListWidget::getLabelString() const { return m_label_mid->text(); } bool checkip(const QString& ip) { QRegExp rx2("^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$"); //QRegExp rx2("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b"); //QRegExp rx2("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)"); if( !rx2.exactMatch(ip) ) { return false; } return true; } bool checkMask(const QString& mask) { QRegExp rx2("^(254|252|248|240|224|192|128|0)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)$"); if( !rx2.exactMatch(mask) ) { return false; } return true; } //判断是否在同一网段 bool isSameNetwork(const QString& ip, const QString& mask, const QString& gateway) { QStringList ipList = ip.split('.',QString::SkipEmptyParts); QStringList maskList = mask.split('.',QString::SkipEmptyParts); QStringList gatewayList = gateway.split('.',QString::SkipEmptyParts); bool ok = true; for(int i = 0;i < 4;i++) { if ((ipList[i].toInt(&ok,10) & maskList[i].toInt(&ok,10)) != (gatewayList[i].toInt(&ok,10) & maskList[i].toInt(&ok,10))) { return false; } } return true; } static bool getIpFromDialogInput(const QString& lineEdit, const QString& initIp, QString& newIp, bool(*pCheckFunc)(const QString&), QObject *bgWidget) { bool ret = false; bool settingFailed = true; do { LineEditInputDialog dlg(lineEdit, bgWidget); dlg.fillRow(0, initIp); if(dlg.exec() == QDialog::Accepted) { do{ if(!((*pCheckFunc)(dlg.getRow(0)))) { break; } newIp = dlg.getRow(0); settingFailed = false; ret = true; }while(0); } else { settingFailed = false; } if(settingFailed) { InfoDialog(QObject::tr("设置有误,请重新输入!"), bgWidget, QObject::tr("知道了")).exec(); } }while(settingFailed); return ret; } bool getIpFromUserInput(const QString& lineEdit, const QString& initIp, QString& newIp, QObject *bgWidget) { return getIpFromDialogInput(lineEdit, initIp, newIp, checkip, bgWidget); } bool getMaskFromUserInput(const QString& lineEdit, const QString& initIp, QString& newIp, QObject *bgWidget) { return getIpFromDialogInput(lineEdit, initIp, newIp, checkMask, bgWidget); } bool getNumFromUserInput(const QString& lineEdit, const QString& initNum, QString& newValue, const int min, const int max, QObject *bgWidget) { bool ret = false; bool settingFailed = true; do { LineEditInputDialog dlg(lineEdit, bgWidget); if(!initNum.isEmpty()) { dlg.fillRow(0, initNum); } if(dlg.exec() == QDialog::Accepted) { bool isDigi = false; int valueSet = dlg.getRow(0).toInt(&isDigi); if(isDigi){ do{ if(valueSet < min || valueSet > max){ break; } newValue = QString::number(valueSet); //转换数字回字符串,去掉无效字符 settingFailed = false; ret = true; }while(0); } } else { settingFailed = false; } if(settingFailed) { InfoDialog(QObject::tr("设置有误,请重新输入!"), bgWidget).exec(); } }while(settingFailed); return ret; } QString GBK2UTF8(const QString &inStr) { QTextCodec *gbk = QTextCodec::codecForName("GB18030"); //QTextCodec *utf8 = QTextCodec::codecForName("UTF-8"); QString g2u = gbk->toUnicode(gbk->fromUnicode(inStr)); // gbk convert utf8 return g2u; } QString UTF82GBK(const QString &inStr) { QTextCodec *gbk = QTextCodec::codecForName("GB18030"); //QTextCodec *utf8 = QTextCodec::codecForName("UTF-8"); QString utf2gbk = gbk->toUnicode(inStr.toLocal8Bit()); return utf2gbk; } std::string gbk2utf8(const QString &inStr) { return GBK2UTF8(inStr).toStdString(); } QString utf82gbk(const std::string &inStr) { QString str = QString::fromStdString(inStr); return UTF82GBK(str); } void gbkToUtf8(char *gbkstr) { QTextCodec *gbk = QTextCodec::codecForName("GB18030"); QTextCodec *utf8 = QTextCodec::codecForName("UTF-8"); //创建str指针,开辟另一控件储存转换后的UTF-8编码 char *str = utf8->fromUnicode(gbk->toUnicode(gbkstr)).data(); //将原字符数组清空 char *clear = gbkstr; //将原字符数组地址附给指针clear,使gbkstr指向地址不作改变 while(*clear != 0x00) //0x00是“空”的意思,也就是' ' { *clear = 0x00; clear++; //后移一位,继续判断 } //复制(覆盖)到原字符数组 strcpy(gbkstr,str); } ProgressWidget::ProgressWidget(const QString& title) { m_label_title = new QLabel(this); m_label_title->setText(title); m_label_title->setAlignment(Qt::AlignCenter); m_label_msg = new QLabel(this); m_label_msg->setAlignment(Qt::AlignCenter); m_slider_progess = new QSlider(this); m_slider_progess->setOrientation(Qt::Horizontal); m_slider_progess->setMaximumHeight(20); m_slider_progess->setMinimum(0); m_slider_progess->setMaximum(100); m_slider_progess->setStyleSheet(" \ QSlider::add-page:Horizontal\ { \ background-color: rgb(87, 97, 106);\ height:4px;\ }\ QSlider::sub-page:Horizontal \ {\ background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(231,80,229, 255), stop:1 rgba(7,208,255, 255));\ height:4px;\ }\ QSlider::groove:Horizontal \ {\ background:transparent;\ height:6px;\ }\ QSlider::handle:Horizontal \ {\ height: 30px;\ width:8px;\ border-image: url(:/images/ic_music_thumb.png);\ margin: -8 0px; \ } \ "); QVBoxLayout* vLayout = new QVBoxLayout(); vLayout->addWidget(m_label_title); vLayout->addWidget(m_label_msg); vLayout->addWidget(m_slider_progess); setLayout(vLayout); } ProgressWidget::~ProgressWidget() { } void ProgressWidget::setMsg(const unsigned current, const unsigned all) { m_label_msg->setText(QString::number(current) + "/" + QString::number(all)); m_slider_progess->setValue(static_cast(static_cast(current) / all * 100)); } PureColorPage::PureColorPage(unsigned color, unsigned char tran, bool drawRect, QWidget* parent) : PageAcceptMouseAndTouch(parent) { m_color = color; m_tran = tran; m_drawRect = drawRect; #if 1 QPalette pal = palette(); pal.setColor(QPalette::Background, QColor((m_color >> 16) & 0xFF, (m_color >> 8) & 0xFF, m_color & 0xFF, m_tran)); setPalette(pal); #endif resize(UiConfig::GetInstance()->getUiWidth(), UiConfig::GetInstance()->getUiHeight()); } PureColorPage::~PureColorPage() { } void PureColorPage::paintEvent(QPaintEvent *event) { QPainter painter(this); #if 0 painter.fillRect(this->rect(), QColor((m_color >> 16) & 0xFF, (m_color >> 8) & 0xFF, m_color & 0xFF, m_tran)); #endif if(m_drawRect){ painter.setPen(Qt::red); QRectF rectangle(UiConfig::GetInstance()->getUiWidth() / 24, UiConfig::GetInstance()->getUiWidth() / 24, UiConfig::GetInstance()->getUiWidth() / 24, UiConfig::GetInstance()->getUiWidth() / 24); painter.drawRect(rectangle); } return QWidget::paintEvent(event); } SettingUiPage::SettingUiPage(const QVector& cfg, QWidget *parent) : MyWidgetWithMainStyleColor(parent), config(cfg) { //qDebug() << "SettingUiPage config size: " << config.size(); 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; }" /*"QListWidget::item:selected:!active{border-width:0px; }"*/); for(int i=0; isetSizeHint(QSize(UiConfig::GetInstance()->getUiHeight() / 12, UiConfig::GetInstance()->getUiHeight() / 12)); m_listWidget->setItemWidget(pItem, mylistwidget); //m_listWidget->setStyleSheet("QListWidget::item{border-top: 1px solid #DFDDEB;}"); #if 0 m_listWidget->setStyleSheet("QListWidget{border-top: 1px solid #DFDDEB;}" "QListWidget::item{border-bottom: 1px solid #DFDDEB;}"); #endif } connect(m_listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(slotItemClicked(QListWidgetItem*))); QVBoxLayout* vbLayout = new QVBoxLayout(); vbLayout->addWidget(m_listWidget); vbLayout->setMargin(0); setLayout(vbLayout); m_listWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QScroller::grabGesture(m_listWidget, QScroller::LeftMouseButtonGesture); m_listWidget->setVerticalScrollMode(QListWidget::ScrollPerPixel); } void SettingUiPage::controlListWidgetItemShow(const bool sw, int option) { QListWidgetItem* pItem = m_listWidget->item(option); m_listWidget->setItemHidden(pItem, static_cast(!static_cast(sw))); } MsgListWidgetItem::MsgListWidgetItem(QWidget* parent) : QWidget(parent) { labelMsg.resize(m_msgOpnQty); labelPic = new QLabel(this); labelPic->setFixedSize(static_cast(UiConfig::GetInstance()->getUiWidth() / 4), static_cast(UiConfig::GetInstance()->getUiHeight() / 10)); labelPic->setAlignment(Qt::AlignCenter); QVBoxLayout* vLayout = new QVBoxLayout(); for(auto &la : labelMsg){ la = new QLabel(this); la->setMinimumHeight(labelPic->height() / 4); vLayout->addWidget(la, 1, Qt::AlignLeft); } vLayout->setMargin(5); vLayout->setSpacing(static_cast(labelPic->height() * 0.3)); QHBoxLayout* hLayout = new QHBoxLayout(); hLayout->addWidget(labelPic); hLayout->addLayout(vLayout, 100); hLayout->setSpacing(5); hLayout->setMargin(5); setLayout(hLayout); } MsgListWidgetItem::~MsgListWidgetItem() { } void MsgListWidgetItem::showMsg(const QString& pic, const QVector& msgs) { labelPic->clear(); for(auto &opn : labelMsg){ opn->clear(); } if("" != pic){ QPixmap faceImg(pic); labelPic->setPixmap(ScalePixmap2Label(faceImg, *labelPic)); } for(int i=0; isetText(msgs[i].m_sMsg); if(enPropertyBold & msgs[i].m_eProp){ QFont ft; ft.setBold(true); labelMsg[i]->setFont(ft); } if(enPropertyGreyWord & msgs[i].m_eProp){ labelMsg[i]->setStyleSheet("color:grey;font-size:30px;"); } else if(enPropertyGreenWord & msgs[i].m_eProp){ labelMsg[i]->setStyleSheet("color:green;font-size:30px;"); } else if(enPropertyRedWord & msgs[i].m_eProp){ labelMsg[i]->setStyleSheet("color:red;font-size:30px;"); } } } PersonMsgUiPage::PersonMsgUiPage(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; }" /*"QListWidget::item:selected:!active{border-width:0px; }"*/); connect(m_listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(slotItemClicked(QListWidgetItem*))); const QString tips[SEARCH_OPN_QTY] = {tr("请输入人员姓名"), tr("请选择通行时间")}; const QString moreBtnIcon[SEARCH_OPN_QTY] = {":res/image/down.png", ":res/image/display.png"}; QGridLayout* glayout = new QGridLayout(); glayout->setColumnStretch(0, 10); glayout->setColumnStretch(1, 1); glayout->setContentsMargins(20, 5, 20, 5); glayout->setSpacing(5); for (int i=0; iparent(), this); } m_editSearch[i]->setFixedHeight(static_cast(UiConfig::GetInstance()->getUiHeight() / 20)); m_editSearch[i]->setStyleSheet("background-color: lightgrey;border-width:0;border-style:outset"); m_editSearch[i]->setTextMargins(40, 0, 40, 0); //QPalette p = m_editSearch[i]->palette(); //p.setColor(QPalette::Active, QPalette::Base, palette().color(QPalette::Active, QPalette::Background)); //p.setColor(QPalette::Inactive, QPalette::Base, palette().color(QPalette::Inactive, QPalette::Background)); //m_editSearch[i]->setPalette(p); connect(m_editSearch[i], SIGNAL(textChanged(const QString&)), this, SLOT(slotTextChanged(const QString&))); if(enSearchOpnName != i){ m_editSearch[i]->hide(); } QLabel *searchIcon = new QLabel(this); const int searchIconWidth = static_cast(m_editSearch[i]->height() * 0.8); searchIcon->setMaximumSize(searchIconWidth, searchIconWidth); searchIcon->setCursor(QCursor(Qt::ArrowCursor)); QPixmap search(":res/image/search.png"); //searchIcon->setPixmap(search.scaled(searchIconWidth, searchIconWidth, Qt::KeepAspectRatio)); searchIcon->setPixmap(search); m_labelTip[i] = new QLabel(this); m_labelTip[i]->setText(tips[i]); QPalette labelple = m_labelTip[i]->palette(); labelple.setColor(QPalette::Active, QPalette::Text, Qt::gray); labelple.setColor(QPalette::Inactive, QPalette::Text, Qt::gray); m_labelTip[i]->setPalette(labelple); m_labelTip[i]->setStyleSheet("background-color:transparent;font-size:20px;"); m_btnClearSearch[i] = new QPushButton(this); setButtonBackImage(m_btnClearSearch[i], ":res/image/close.png", 30, 30); connect(m_btnClearSearch[i], SIGNAL(clicked()), this, SLOT(slotBtnClicked())); m_btnClearSearch[i]->hide(); QSpacerItem *spaceItem = new QSpacerItem(700, 40, QSizePolicy::Expanding); QHBoxLayout *editLayout = new QHBoxLayout(); editLayout->setContentsMargins(5, 0, 5, 0); editLayout->addWidget(searchIcon, 1, Qt::AlignLeft); editLayout->addWidget(m_labelTip[i], 1, Qt::AlignLeft); editLayout->addSpacerItem(spaceItem); editLayout->addWidget(m_btnClearSearch[i], 100, Qt::AlignRight); editLayout->setSpacing(10); m_editSearch[i]->setLayout(editLayout); if(enSearchOpnName != i){ m_editSearch[i]->setReadOnly(true); } glayout->addWidget(m_editSearch[i], i, 0); if(enSearchOpnName == i){ m_btnMore = new QPushButton(this); setButtonBackImage(m_btnMore, ":res/image/down.png", 55, 40); connect(m_btnMore, SIGNAL(clicked()), this, SLOT(slotBtnClicked())); m_btnMore->setEnabled(false); glayout->addWidget(m_btnMore, i, 1); } } m_stackWgt = new QStackedWidget(this); m_stackWgt->addWidget(m_listWidget); m_stackWgt->setFixedSize(UiConfig::GetInstance()->getUiWidth(), static_cast(UiConfig::GetInstance()->getUiHeight() / 0.6)); m_labelPage = new QLabel(this); m_labelMin = new QLabel(this); m_labelMax = new QLabel(this); m_btnPrePage = new QPushButton(this); setButtonBackImage(m_btnPrePage, ":res/image/left.png", 37, 61); connect(m_btnPrePage, SIGNAL(clicked(bool)), this, SLOT(slotBtnClicked())); m_btnNextPage = new QPushButton(this); setButtonBackImage(m_btnNextPage, ":res/image/right.png", 37, 61); connect(m_btnNextPage, SIGNAL(clicked(bool)), this, SLOT(slotBtnClicked())); m_sliderPage = new QSlider(this); m_sliderPage->setOrientation(Qt::Horizontal); m_sliderPage->setMinimumWidth(static_cast(UiConfig::GetInstance()->getUiWidth() * 0.5)); //m_sliderPage->setMinimum(min); //m_sliderPage->setMaximum(max); //m_sliderPage->setValue(current); //m_sliderPage->setSingleStep(10); //m_sliderPage->setGeometry(30,this->height()-28,200,25); if(UiConfig::GetInstance()->isRkDevice()){ m_sliderPage->setMaximumHeight(44); m_sliderPage->setStyleSheet("QSlider::handle:horizontal{width:48px;background-color:rgb(255,255,255);margin:-22px 0px -22px 0px;border-radius:24px;}" "QSlider::groove:horizontal{height:32px;background-color:rgb(219,219,219);}" "QSlider::add-page:horizontal{background-color:rgb(219,219,219);}" "QSlider::sub-page:horizontal{background-color:rgb(26,217,110);}"); } else{ m_sliderPage->setMinimumHeight(60); m_sliderPage->setStyleSheet("QSlider::handle:horizontal{width:48px;background-color:rgb(255,255,255);margin:-22px 0px -22px 0px;border-radius:24px;}" "QSlider::groove:horizontal{height:48px;background-color:rgb(219,219,219);}" "QSlider::add-page:horizontal{background-color:rgb(219,219,219);}" "QSlider::sub-page:horizontal{background-color:rgb(26,217,110);}"); } QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; effect->setOffset(4,4); effect->setColor(QColor(0,0,0,50)); effect->setBlurRadius(10); m_sliderPage->setGraphicsEffect(effect); connect(m_sliderPage, SIGNAL(valueChanged(int)), this, SLOT(slotValueChanged(int))); connect(m_sliderPage, SIGNAL(sliderReleased()), this, SLOT(slotSliderReleased())); QHBoxLayout* hlay = new QHBoxLayout(); hlay->addWidget(m_btnPrePage, 1, Qt::AlignLeft); hlay->addWidget(m_labelMin, 15, Qt::AlignCenter); hlay->addWidget(m_sliderPage, 70, Qt::AlignCenter); hlay->addWidget(m_labelMax, 15, Qt::AlignCenter); hlay->addWidget(m_btnNextPage, 1, Qt::AlignRight); hlay->setSpacing(20); hlay->setMargin(30); QVBoxLayout* vbLay = new QVBoxLayout(); vbLay->addWidget(m_labelPage, 1, Qt::AlignCenter); vbLay->addLayout(hlay, 1); vbLay->setSpacing(0); vbLay->setMargin(5); QVBoxLayout* vbLayout = new QVBoxLayout(); vbLayout->addLayout(glayout, 1); vbLayout->addWidget(m_stackWgt, 80, Qt::AlignCenter); vbLayout->addLayout(vbLay, 1); vbLayout->setSpacing(20); vbLayout->setMargin(10); setLayout(vbLayout); for(unsigned i=0; isetSizeHint(QSize(UiConfig::GetInstance()->getUiHeight() / 8, UiConfig::GetInstance()->getUiHeight() / 8)); m_listWidget->setItemWidget(pItem, listwidgetItem); //m_listWidget->setStyleSheet("QListWidget::item{border-top: 1px solid #DFDDEB;}"); m_listWidget->setItemHidden(pItem, true); } setPageControlBarHide(true); } void PersonMsgUiPage::showMsg(const QVector& msgs) { for(int i = 0; i < static_cast(m_itemQty); i++){ if(i(m_listWidget->itemWidget(m_listWidget->item(i)))->showMsg(msgs[i].m_sPic, msgs[i].m_vMsgs); m_listWidget->setItemHidden(m_listWidget->item(i), false); } else { m_listWidget->setItemHidden(m_listWidget->item(i), true); } } } void PersonMsgUiPage::clearMsg() { for(unsigned i = 0; i < m_itemQty/* + 1*/; i++){ m_listWidget->setItemHidden(m_listWidget->item(static_cast(i)), true); } } void PersonMsgUiPage::setPageControlBarHide(bool hide, int min, int max, int current) { if(hide){ m_labelPage->hide(); m_labelMin->hide(); m_labelMax->hide(); m_btnPrePage->hide(); m_btnNextPage->hide(); m_sliderPage->hide(); } else { m_sliderPage->setMinimum(min); m_sliderPage->setMaximum(max); m_sliderPage->setValue(current); m_labelPage->setText(QString::number(current)); m_labelMin->setText(QString::number(min)); m_labelMax->setText(QString::number(max)); m_labelPage->show(); m_labelMin->show(); m_labelMax->show(); m_btnPrePage->show(); m_btnNextPage->show(); m_sliderPage->show(); m_btnPrePage->setEnabled(current - min); m_btnNextPage->setEnabled(max - current); } } void PersonMsgUiPage::showMoreSearchOpn() { m_btnMore->setEnabled(true); } void PersonMsgUiPage::slotValueChanged(int value) { m_labelPage->setText(QString::number(value)); } void PersonMsgUiPage::slotBtnClicked() { for (int i=0; iclear(); return; } } if(sender() == m_btnMore){ static bool sw = false; if(sw){ m_editSearch[enSearchOpnTime]->hide(); setButtonBackImage(m_btnMore, ":res/image/down.png", 55, 40); } else { m_editSearch[enSearchOpnTime]->show(); setButtonBackImage(m_btnMore, ":res/image/up.png", 55, 40); } m_editSearch[enSearchOpnTime]->clear(); m_sSearchtime = ""; sw = !sw; return; } else if(sender() == m_btnPrePage){ qDebug() << "pre btn clicked"; m_toPageNum = m_labelPage->text().toInt() - 1; } else if(sender() == m_btnNextPage){ qDebug() << "next btn clicked"; m_toPageNum = m_labelPage->text().toInt() + 1; } m_btnPrePage->setEnabled(m_toPageNum > 1); m_btnNextPage->setEnabled(m_toPageNum < m_sliderPage->maximum()); m_labelPage->setText(QString::number(m_toPageNum)); m_sliderPage->setValue(m_toPageNum); } void PersonMsgUiPage::slotItemClicked(QListWidgetItem *item) { return; } void PersonMsgUiPage::slotSliderReleased() { m_toPageNum = m_labelPage->text().toInt(); m_btnPrePage->setEnabled(m_toPageNum > 1); m_btnNextPage->setEnabled(m_toPageNum < m_sliderPage->maximum()); } WifiListWidget::WifiListWidget(const QString& ssid, bool connected, bool withLock, int sigLevel, bool isTargetNet, QWidget* parent) : QWidget (parent), m_isLock(withLock), m_isTargetNet(isTargetNet), m_isConnected(connected) { QHBoxLayout* hLay = new QHBoxLayout(); m_label_conn = new QLabel(this); if(connected){ QPixmap pm(":/res/image/wifi_connected.png"); m_label_conn->setPixmap(pm); } hLay->addWidget(m_label_conn, 1, Qt::AlignLeft); m_label_ssid = new QLabel(this); m_label_ssid->setText(ssid); hLay->addWidget(m_label_ssid, 90, Qt::AlignLeft); if(withLock){ QLabel* lock = new QLabel(this); QPixmap pm(":/res/image/wifi_lock.png"); lock->setPixmap(pm); hLay->addWidget(lock, 1, Qt::AlignRight); } QPixmap pm; QLabel* labelSigLevel = new QLabel(this); if(sigLevel >= 0){ QString wifiIcon; if(sigLevel <= 34){ wifiIcon = ":/res/image/wifi1.png"; } else if(sigLevel <= 49){ wifiIcon = ":/res/image/wifi2.png"; } else if(sigLevel <= 69){ wifiIcon = ":/res/image/wifi3.png"; } else{ wifiIcon = ":/res/image/wifi4.png"; } pm.load(wifiIcon); //pm = pm.scaled(44, 44); labelSigLevel->setPixmap(pm); } hLay->addWidget(labelSigLevel, 1, Qt::AlignRight); QLabel* labelNext = new QLabel(this); pm.load(":/res/image/pageNext.png"); labelNext->setPixmap(pm); hLay->addWidget(labelNext, 1, Qt::AlignRight); hLay->setSpacing(10); hLay->setContentsMargins(20, 20, 40, 20); setLayout(hLay); } WifiListWidget::~WifiListWidget() { } void WifiListWidget::updateStatus(bool connected) { if(connected){ QPixmap pm(":/res/image/wifi_connected.png"); m_label_conn->setPixmap(pm); } else { m_label_conn->clear(); } m_isConnected = connected; if(m_isConnected){ m_isTargetNet = true; } } QString WifiListWidget::getSsid() const { return m_label_ssid->text(); } bool WifiListWidget::isTargetNet() const { return m_isTargetNet; } bool WifiListWidget::isConnected() const { return m_isConnected; } bool WifiListWidget::getLockStatus() const { return m_isLock; } void WifiListWidget::clearStatus() { m_isTargetNet = false; updateStatus(false); } WifiAccPointDialog::WifiAccPointDialog(QObject *bgWidget) : LineEditInputDialog(QList{tr("名称"), tr("密码")}, bgWidget, tr("加入")) { qDebug() << "WifiAccPointDialog"; QLabel* label = new QLabel(this); label->setText(tr("加密方式")); m_comBox_encType = new QComboBox(this); QStringList strList; strList<<"none"<<"wep"<<"WPA-PSK/WPA2-PSK"; m_comBox_encType->addItems(strList); formLayout->insertRow(1, label, m_comBox_encType); } WifiAccPointDialog::~WifiAccPointDialog() { qDebug() << "~WifiAccPointDialog"; } void WifiAccPointDialog::slotConfirmBtnClicked() { m_sEncType = m_comBox_encType->currentText(); LineEditInputDialog::slotConfirmBtnClicked(); } QString WifiAccPointDialog::getEncType() const { return m_sEncType; } int GrabFullScreen(const QString& picName, int rotate) { QMatrix matrix; matrix.rotate(rotate); return QGuiApplication::primaryScreen()->grabWindow(0).transformed(matrix, Qt::SmoothTransformation).save(picName, "jpg"); } QPasswordLineEdit::QPasswordLineEdit(QWidget *parent, const QString& ch, int timeout) : QLineEdit(parent), m_ch(ch), m_Timeout(timeout) { connect(this,SIGNAL(cursorPositionChanged(int,int)),this,SLOT(DisplayPasswordAfterEditSlot(int,int))); //connect(this,SIGNAL(textEdited(const QString&)),this,SLOT(GetRealTextSlot(const QString&))); if(UiConfig::GetInstance()->isRkDevice()){ m_timer = new QTimer(this); connect(m_timer, SIGNAL(timeout()), this, SLOT(DisplayPasswordSlot())); } } QPasswordLineEdit::~QPasswordLineEdit() { } void QPasswordLineEdit::DisplayPasswordAfterEditSlot(int oldPos,int newPos) { if(oldPos>=0 && newPos>=0 ){ if(newPos>oldPos){ if(UiConfig::GetInstance()->isRkDevice()){ m_timer->start(m_Timeout); } else{ QTimer::singleShot(m_Timeout,this,SLOT(DisplayPasswordSlot())); } }else{ setCursorPosition(oldPos); } } } void QPasswordLineEdit::DisplayPasswordSlot() { setText(GetMaskString()); if(UiConfig::GetInstance()->isRkDevice()){ m_timer->stop(); } } void QPasswordLineEdit::GetRealTextSlot(const QString& text) { if(text.count()>m_LastCharCount){ m_LineEditText.append(text.right(1)); }else if(text.count()){ m_LineEditText.remove(m_LineEditText.count()-1,1); } m_LastCharCount = m_LineEditText.count(); } QString QPasswordLineEdit::GetPassword() const { return m_LineEditText; } void QPasswordLineEdit::SetTimeout(int msec) { m_Timeout = msec; } int QPasswordLineEdit::GetTimeout() const { return m_Timeout; } QString QPasswordLineEdit::GetMaskString() { QString ret; for(int i=0; isetFixedWidth(w / 4); m_btnClear->move(w / 8 * 1, 50); m_btnClear->setText("reset"); m_btnClear->setStyleSheet("QPushButton{border:none;background:transparent;}"); //m_btnClear->setFlat(true); m_btnExit = new QPushButton(this); m_btnExit->setFixedWidth(w / 4); m_btnExit->move(w / 8 * 5, 50); m_btnExit->setText("exit"); m_btnExit->setStyleSheet("QPushButton{border:none;background:transparent;}"); QPalette pal = palette(); pal.setColor(QPalette::Background, QColor(255, 255, 255, 255)); setPalette(pal); setAutoFillBackground(true); m_current.points.clear(); connect(m_btnClear, SIGNAL(clicked()), this, SLOT(slotClearBtnClicked())); connect(m_btnExit, SIGNAL(clicked()), this, SLOT(slotExitBtnClicked())); } void DrawPage::mousePressEvent(QMouseEvent *evt) { m_current.points.append(evt->pos()); } void DrawPage::mouseMoveEvent(QMouseEvent *evt) { append(evt->pos()); update(); } void DrawPage::mouseReleaseEvent(QMouseEvent *evt) { append(evt->pos()); m_drawList.append(m_current); m_current.points.clear(); update(); } void DrawPage::append(QPoint p) { m_current.points.append(p); } void DrawPage::paintEvent(QPaintEvent *) { QPainter painter(this); for(int i=0; i= 2) { painter.setPen(QPen(Qt::black)); painter.setBrush(QBrush(Qt::black)); for(int i=0; isetPlaceholderText(tr("请输入您的密码")); m_editPwd->setReadOnly(true); m_btnConfirm = new QPushButton(this); m_btnConfirm->setText(tr("确认")); connect(m_btnConfirm, SIGNAL(clicked()), this, SLOT(slotBtnClicked())); m_btnBackspace = new QPushButton(this); m_btnBackspace->setText(tr("删除")); connect(m_btnBackspace, SIGNAL(clicked()), this, SLOT(slotBtnClicked())); m_btnClear = new QPushButton(this); m_btnClear->setText(tr("清空")); connect(m_btnClear, SIGNAL(clicked()), this, SLOT(slotBtnClicked())); m_btnBack = new QPushButton(this); m_btnBack->setText(tr("返回")); connect(m_btnBack, SIGNAL(clicked()), this, SLOT(slotBtnClicked())); QHBoxLayout* hlayTop = new QHBoxLayout(); hlayTop->addWidget(m_btnBack); hlayTop->addWidget(m_editPwd); QGridLayout* glayMid = new QGridLayout(); for(int i=0; isetText(QString::number(i)); connect(m_btnsNum[i], SIGNAL(clicked()), this, SLOT(slotBtnClicked())); if(i > 0){ const int pos = i - 1; glayMid->addWidget(m_btnsNum[i], pos / 3, pos % 3); } } glayMid->addWidget(m_btnClear, 3, 0); glayMid->addWidget(m_btnsNum[0], 3, 1); glayMid->addWidget(m_btnBackspace, 3, 2); QHBoxLayout* hlayBtm = new QHBoxLayout(); hlayBtm->addWidget(m_btnConfirm); QVBoxLayout* vlay = new QVBoxLayout(); vlay->addLayout(hlayTop); vlay->addLayout(glayMid); vlay->addLayout(hlayBtm); setLayout(vlay); } void UserPwdDialog::slotBtnClicked() { const QObject* send = sender(); if (send == m_btnConfirm) { m_pwd = m_editPwd->text(); //m_editPwd->clear(); //hide(); done(Accepted); } else if (send == m_btnBackspace) { QString text = m_editPwd->text(); if(text.size()){ m_editPwd->setText(text.left(text.size() - 1)); } } else if (send == m_btnClear) { m_editPwd->clear(); } else if (send == m_btnBack) { m_pwd = m_editPwd->text(); //m_editPwd->clear(); //hide(); done(Rejected); } else{ for(int i=0; isetText(m_editPwd->text() + m_btnsNum[i]->text()); break; } } } } RoundedWidget::RoundedWidget(QWidget *parent) : QWidget(parent) { } void RoundedWidget::paintEvent(QPaintEvent *event) { //圆角 QBitmap bmp(this->size()); bmp.fill(); QPainter p(&bmp); p.setPen(Qt::NoPen); p.setBrush(Qt::black); p.drawRoundedRect(bmp.rect(),20,20); setMask(bmp); //绘制边框 QStyleOption opt; opt.initFrom(this); QPainter pr(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &pr, this);//绘制样式 return QWidget::paintEvent(event); } StyleItemChooseDialog::StyleItemChooseDialog(const QString& title, const QStringList& items, BackstageInterfaceForUi* backstageIf) : CustomDialog (tr("确定"), nullptr, tr("取消")), m_backstageIf(backstageIf) { dialogWidth = static_cast(UiConfig::GetInstance()->getUiWidth() * 0.7); double scale = 0.1 * (2 + items.size()); scale = scale > 0.8 ? 0.8 : scale; dialogHeight = static_cast(UiConfig::GetInstance()->getUiHeight() * scale); resize(dialogWidth, dialogHeight); QLabel* tle = new QLabel(title, this); 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(static_cast(dialogHeight * 0.03)); m_listWidget->setStyleSheet("QListWidget{border-width:0;border-style:outset; background:transparent;}" "QListWidget::Item{background:rgb(182, 182, 182);border-radius:10px;padding:2px 4px;}" "QListWidget::Item:hover{background:rgb(255, 255, 255);border-radius:10px;padding:2px 4px;}" "QListWidget::item:selected{background:rgb(70, 132, 198);border-radius:10px;padding:2px 4px;}" "QListWidget::item:selected:!active{background:rgb(70, 132, 198);border-width:0px;border-radius:10px;padding:2px 4px;}"); m_listWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QScroller::grabGesture(m_listWidget, QScroller::LeftMouseButtonGesture); m_listWidget->setVerticalScrollMode(QListWidget::ScrollPerPixel); m_listWidget->setFixedSize(dialogWidth, static_cast(dialogHeight * 0.7)); m_listWidget->addItems(items); //QFont ft; for (int i=0; icount(); i++) { //ft.setPointSize(static_cast(m_listWidget->item(i)->font().pointSize() * 2)); //m_listWidget->item(i)->setFont(ft); m_listWidget->item(i)->setTextAlignment(0x0084); m_listWidget->item(i)->setSizeHint(QSize(dialogWidth, static_cast(UiConfig::GetInstance()->getUiHeight() * 0.05))); } m_listWidget->setCurrentRow(0); connect(m_listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(slotItemClicked(QListWidgetItem*))); QVBoxLayout* vLay = new QVBoxLayout(); vLay->addWidget(tle, 1, Qt::AlignCenter); vLay->addWidget(m_listWidget, 90, Qt::AlignCenter); //vLay->setMargin(0); vLay->setContentsMargins(0, static_cast(dialogHeight * 0.1), 0, 0); vLay->setSpacing(static_cast(dialogHeight * 0.1)); vLay->addLayout(hbtmLayout); setLayout(vLay); //支持圆角边框 setStyleSheet("background-color:rgb(255, 255, 255);border-radius:10px;padding:2px 4px;focus{outline: none;}"); //setStyleSheet("QWidget{background-color:gray;border-top-left-radius:15px;border-top-right-radius:5px;}"); setAttribute(Qt::WA_TranslucentBackground);//设置窗口背景透明 setWindowFlags(Qt::FramelessWindowHint); //设置无边框窗口 if(m_timer == nullptr){ m_timer = new QTimer(this); } connect(m_timer, SIGNAL(timeout()), this, SLOT(slotTimeout())); m_timer->start(TIMEOUT); } StyleItemChooseDialog::~StyleItemChooseDialog() { } void StyleItemChooseDialog::paintEvent(QPaintEvent *event) { //支持圆角边框 QStyleOption opt; opt.initFrom(this); QPainter pr(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &pr, this);//绘制样式 return QWidget::paintEvent(event); } void StyleItemChooseDialog::slotItemClicked(QListWidgetItem* item) { Q_UNUSED(item); m_chooseIndex = m_listWidget->currentRow(); m_timeCnt = 0; m_timer->start(TIMEOUT); } int StyleItemChooseDialog::getChoosedIndex() const { return m_chooseIndex; } void StyleItemChooseDialog::slotTimeout() { m_timeCnt++; qDebug() << "slotTimeout:" << m_timeCnt; if(m_timeCnt <= (PROC_OVERTIME - BACKSTAGE_PROC_OVERTIME + 1) ){//后台运行时间增加1s,确保界面选择了的情况下后台不会发送超时 m_backstageIf->resetDecisionCenterTimer(); } else if(m_timeCnt >= PROC_OVERTIME){ m_timer->stop(); done(Rejected); } } SelectionDialog::SelectionDialog(const QString& tips, const QString& sel0, const QString& sel1, QObject *bgWidget) : CustomDialog(sel1, bgWidget, sel0) { QLabel* labelQues = new QLabel(this); labelQues->setWordWrap(true); labelQues->setText(tips); QVBoxLayout* vLayout = new QVBoxLayout(); vLayout->addWidget(labelQues, 90, Qt::AlignCenter); vLayout->addLayout(hbtmLayout); vLayout->setSpacing(dialogHeight / 5); vLayout->setContentsMargins(0, dialogHeight / 10, 0, 0); setLayout(vLayout); if(QDialog::Accepted == exec()){ m_sel = 1; } } int SelectionDialog::selecion() const { return m_sel; } TimeWidget::TimeWidget(bool enType, int timeSize, int dateSize, QWidget *parent) : QWidget(parent) { QLabel* time = new QLabel(this); QFont ft; ft.setPointSize(timeSize); time->setFont(ft); QLabel* date = new QLabel(this); ft.setPointSize(dateSize); date->setFont(ft); m_timerUpdate = new TimerUpdate(time, date, this, 1, 0, enType ? 1 : 2); //Q_UNUSED(timerUpdate); QPalette palette(this->palette()); palette.setColor(QPalette::WindowText,Qt::black); setPalette(palette); QVBoxLayout* vlay = new QVBoxLayout(); vlay->addStretch(10); vlay->addWidget(time, 1, Qt::AlignCenter); vlay->addWidget(date, 1, Qt::AlignCenter); vlay->addStretch(10); setLayout(vlay); } void TimeWidget::enableUpdate(bool enable) { m_timerUpdate->enableUpdate(enable); } DateTimeWidgetClassical::DateTimeWidgetClassical(int fontSize, QWidget *parent) : QWidget(parent) { QFont ft; ft.setPointSize(fontSize); QLabel* date = new QLabel(this); date->setFont(ft); QLabel* time = new QLabel(this); time->setFont(ft); TimerUpdate* timerUpdate = new TimerUpdate(time, date, this, 1, 1); connect(timerUpdate, SIGNAL(signalNewDay()), this, SIGNAL(signalNewDay())); QHBoxLayout* hlay = new QHBoxLayout(); hlay->addWidget(date, 1, Qt::AlignLeft); hlay->addWidget(time, 1, Qt::AlignRight); hlay->setMargin(0); setLayout(hlay); } //BtListWidget::BtListWidget(const QString &devId, const QString &devName, bool isPaired, int devStat) BtListWidget::BtListWidget(BluetoothDev_t &rBtDev/*, bool isPaired*/) { m_btDev = rBtDev; //m_isPaired = isPaired; m_label_dev = new QLabel(this); m_label_btIcon= new QLabel(this); m_pushButton_set = new QPushButton(this); connect(m_pushButton_set, SIGNAL(clicked()), this, SLOT(slotBtnSetClick())); QHBoxLayout* hLay = new QHBoxLayout(); hLay->addWidget(m_label_btIcon, 1, Qt::AlignLeft); hLay->addWidget(m_label_dev, 90, Qt::AlignLeft); hLay->addWidget(m_pushButton_set, 1, Qt::AlignRight); hLay->setSpacing(10); hLay->setContentsMargins(20, 20, 40, 20); setLayout(hLay); refreshWidget(); } BtListWidget::~BtListWidget() { } void BtListWidget::refreshWidget() { QPixmap pm; if(m_btDev.devStat == BlueToothDevStat_connected) { pm.load(":/res/image/bt_blue_large.png"); }else { pm.load(":/res/image/bt_black_large.png"); } m_label_btIcon->setPixmap(pm.scaled(45, 45, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); QString showTextStr; switch (m_btDev.devStat) { case BlueToothDevStat_idle: case BlueToothDevStat_paired: showTextStr = QString("

%1

").arg(QString::fromStdString(m_btDev.name)); break; case BlueToothDevStat_pairing://匹配中 showTextStr = QString("

%1
正在匹配中...

").arg(QString::fromStdString(m_btDev.name)); break; case BlueToothDevStat_connecting://连接中 showTextStr = QString("

%1
正在连接中...

").arg(QString::fromStdString(m_btDev.name)); break; case BlueToothDevStat_connected://已连接 showTextStr = QString("

%1
已连接

").arg(QString::fromStdString(m_btDev.name)); break; default: showTextStr = QString("%1").arg(QString::fromStdString(m_btDev.name)); break; } m_label_dev->setText(showTextStr); //m_label_dev->setStyleSheet("background-color:yellow"); m_label_dev->setAttribute(Qt::WA_TransparentForMouseEvents, true);//观察到设置html文本时,属性发生变化 setButtonBackImage(m_pushButton_set, ":/res/image/gear_large.png"); if(/*m_isPaired*/m_btDev.devStat >= BlueToothDevStat_paired){ m_pushButton_set->setVisible(true); }else{ m_pushButton_set->setVisible(false); } } void BtListWidget::getDevInfo(BluetoothDev_t &dev) { dev=m_btDev; } void BtListWidget::updateDev(BluetoothDev_t &rBtDev) { m_btDev = rBtDev; refreshWidget(); } void BtListWidget::slotBtnSetClick() { LOGD("slotBtnSetClick: %s", m_btDev.name.c_str()); emit signalClickSet(m_btDev); } IpInputBar::IpInputBar(bool isMask, QWidget *parent) : QWidget(parent), m_isMask(isMask) { QHBoxLayout *hlay = new QHBoxLayout(); hlay->setMargin(5); hlay->setSpacing(5); for (int i = 0; i < 4; i++) { LineEditWithKeyboard *edit = new LineEditWithKeyboard(this); edit->setFixedWidth(60); edit->setStyleSheet("QLineEdit { background: transparent; border: none; border-bottom: 1px solid black; }"); connect(edit, SIGNAL(textChanged(const QString &)), this, SLOT(slotTextChanged(const QString &))); connect(edit, SIGNAL(signalBackspacePressed()), this, SLOT(slotBackspacePressed())); m_edits.push_back(edit); hlay->addWidget(edit); if (i < 3) { hlay->addWidget(new QLabel(".", this)); } } setLayout(hlay); } void IpInputBar::slotBackspacePressed() { LineEditWithKeyboard *edit = dynamic_cast(sender()); int editIndex = 0; for (int i = 0; i < 4; i++) { if (edit == m_edits.at(i)) { editIndex = i; break; } } if (editIndex != 0 && edit->cursorPosition() == 0) { keyboard::GetInstance(m_edits.at(editIndex - 1)); } } void IpInputBar::slotTextChanged(const QString &t) { qDebug() << "text:" << t; if (t.isEmpty()) { return; } bool ok = false; int value = t.toInt(&ok); if (!ok) { value = -1; } LineEditWithKeyboard *edit = dynamic_cast(sender()); int editIndex = 0; for (int i = 0; i < 4; i++) { if (edit == m_edits.at(i)) { editIndex = i; break; } } do { bool inputOk = false; ON_SCOPE_EXIT([&] { if (inputOk) { if (t.size() >= 3 && editIndex != 3) { keyboard::GetInstance(m_edits.at(editIndex + 1)); } } }); QString lastChar{t.at(t.size() - 1)}; if (value < 0 && editIndex != 3 && (lastChar == "." || lastChar == "·")) { keyboard::GetInstance(m_edits.at(editIndex + 1)); break; } QString errorTip; if (!m_isMask && editIndex == 0) { if (value >= 1 && value <= 223) { inputOk = true; return; } errorTip = tr("请指定一个介于1和223之间的值"); } else { if (value >= 0 && value <= 255) { inputOk = true; return; } errorTip = tr("请指定一个介于0和255之间的值"); } InfoDialog(errorTip).exec(); } while (0); edit->setText(edit->text().remove(edit->cursorPosition() - 1, 1)); } bool IpInputBar::isEmpty() const { for (const auto &e : m_edits) { if (!e->text().isEmpty()) { return false; } } return true; } QString IpInputBar::getIp() const { return m_edits.at(0)->text() + "." + m_edits.at(1)->text() + "." + m_edits.at(2)->text() + "." + m_edits.at(3)->text(); } IpInputBarDialog::IpInputBarDialog(const QStringList &options, const QVector &required, const QVector &isMask, QObject *bgWidget) : CustomDialog(tr("确定"), bgWidget), m_required(required) { QVBoxLayout *vLayout = new QVBoxLayout(); int i = 0; for (const auto &s : options) { QHBoxLayout *hLayBar = new QHBoxLayout(); hLayBar->setSpacing(10); hLayBar->addWidget(new QLabel(s, this), 10, Qt::AlignLeft); IpInputBar *bar = new IpInputBar(isMask.size() > i ? isMask.at(i) : false, this); bar->setFixedHeight(dialogHeight / 4); hLayBar->addWidget(bar, 1, Qt::AlignRight); m_bars.push_back(bar); vLayout->addLayout(hLayBar); i++; } vLayout->addStretch(); vLayout->addLayout(hbtmLayout, 1); vLayout->setMargin(20); vLayout->setSpacing(10); setLayout(vLayout); setFixedSize(dialogWidth, static_cast(dialogHeight * 1.5)); move((UiConfig::GetInstance()->getUiWidth() - dialogWidth) / 2, UiConfig::GetInstance()->getUiHeight() / 3); } void IpInputBarDialog::slotConfirmBtnClicked() { for (int i = 0; i < m_bars.size(); i++) { const bool needCheck = !m_bars.at(i)->isEmpty() || i >= m_required.size() || m_required.at(i); if (needCheck && !checkip(m_bars.at(i)->getIp())) { InfoDialog(tr("设置有误,请重新输入!")).exec(); return; } } CustomDialog::slotConfirmBtnClicked(); } QString IpInputBarDialog::getRow(int row) const { if (row >= m_bars.size()) { return ""; } return m_bars.at(row)->isEmpty() ? "" : m_bars.at(row)->getIp(); } QString SearchBarCandidate::getCurrentChooseText() { return m_listWidget->currentItem()->text(); } void SearchBarCandidate::slotItemClicked(QListWidgetItem* item) { ItemChoosePage::slotItemClicked(item); emit signalItemChoosed(m_listWidget->currentRow()); } ImgPlayer::ImgPlayer(int width, int height, QWidget *parent) : QWidget(parent), m_width(width), m_height(height) { setFixedSize(m_width, m_height); m_targetRct = QRectF(0.0, 0.0, m_width, m_height); } void ImgPlayer::paintEvent(QPaintEvent * event) { QPainter painter(this); painter.drawImage(m_targetRct, m_img); } void ImgPlayer::slotImgLoad(QImage img) { m_img = img.scaled(m_width, m_height); update(); }