#include "passworddialog.h" #include "ui_passworddialog.h" PassWordDialog::PassWordDialog(QWidget *parent) : QDialog(parent), ui(new Ui::PassWordDialog) { ui->setupUi(this); setWindowFlags (Qt::Window | Qt::FramelessWindowHint); setWindowModality(Qt::ApplicationModal); setAttribute(Qt::WA_TranslucentBackground, true);//设置窗体背景透明 initControl(); m_inputStr.clear(); m_ifShow = false; m_cleanFlag = 0; m_ipLength = 0; refreshUi(); } PassWordDialog::~PassWordDialog() { delete ui; } //初始化窗体控件,包括位置、尺寸、样式 void PassWordDialog::initControl() { m_NumerBtnlist.clear(); m_NumerBtnlist.append(ui->buttonNum7); m_NumerBtnlist.append(ui->buttonNum8); m_NumerBtnlist.append(ui->buttonNum9); m_NumerBtnlist.append(ui->buttonNum4); m_NumerBtnlist.append(ui->buttonNum5); m_NumerBtnlist.append(ui->buttonNum6); m_NumerBtnlist.append(ui->buttonNum1); m_NumerBtnlist.append(ui->buttonNum2); m_NumerBtnlist.append(ui->buttonNum3); m_NumerBtnlist.append(ui->buttonNum0); for(int var = 0; var < m_NumerBtnlist.size(); var++) { connect(m_NumerBtnlist.at(var), SIGNAL(clicked()), this, SLOT(numerBtnClick()) ); } //根据不同分辨率设置控件的位置和尺寸 initResolution(); initControlStyle();//初始化窗体控件样式 } //初始化窗体控件为任意分辨率 void PassWordDialog::initResolution() { #define FRAME_LEFT (328) // 小窗口 #define FRAME_TOP (80) #define FRAME_WIGHT (367) #define FRAME_HEIGHT (406) #define TITLE_HEIGHT (48) // 标题栏高度 #define NUM_LEFT (23) // 数值左 #define NUM_TOP (85) // 数值上 #define NUM_WIGHT (323) // 数值宽度 #define NUM_HEIGHT (42) // 数值高度 #define NUM_CONT_X (FRAME_LEFT+NUM_LEFT) // 中心点x #define NUM_CONT_Y (FRAME_TOP+NUM_TOP+NUM_HEIGHT) // 中心点y double factoryX = getFactoryX(); double factoryY = getFactoryY(); this->resize(GLB_SCR_WIGHT*factoryX,GLB_SCR_HEIGHT*factoryY); this->move((GLB_SCR_WIGHT*factoryX-this->width())/2+g_mainWidgetPos.x(),(GLB_SCR_HEIGHT*factoryY-this->height())/2+g_mainWidgetPos.y()); ui->frameBack->setGeometry(0*factoryX,0*factoryY,GLB_SCR_WIGHT*factoryX,GLB_SCR_HEIGHT*factoryY); ui->labelTitle->setGeometry((FRAME_LEFT+GLB_EDGE_WIGHT)*factoryX,(FRAME_TOP+(TITLE_HEIGHT-GLB_TEXT_HEIGHT)/2-8)*factoryY,(FRAME_WIGHT-GLB_TAB_WIGHT*2)*factoryX,GLB_TEXT_L_HEIGHT*factoryY); ui->labelValue->setGeometry((FRAME_LEFT+NUM_LEFT+GLB_TAB_WIGHT)*factoryX,(FRAME_TOP+NUM_TOP)*factoryY,(NUM_WIGHT-GLB_TAB_WIGHT*2)*factoryX,GLB_TEXT_L_HEIGHT*factoryY); // ui->labelTitle->setGeometry((FRAME_LEFT+GLB_EDGE_WIGHT)*factoryX,(FRAME_TOP+(TITLE_HEIGHT-GLB_TEXT_HEIGHT)/2+10)*factoryY,(FRAME_WIGHT-GLB_TAB_WIGHT*2)*factoryX,GLB_TEXT_HEIGHT*factoryY); // ui->labelValue->setGeometry((FRAME_LEFT+NUM_LEFT+GLB_TAB_WIGHT+20)*factoryX,(FRAME_TOP+NUM_TOP+11)*factoryY,(NUM_WIGHT-GLB_TAB_WIGHT*2)*factoryX,GLB_TEXT_L_HEIGHT*factoryY); int bgX,bgY; bgX = NUM_CONT_X; bgY = NUM_CONT_Y + GLB_EDGE_WIGHT; for(int i = 0; i < 4; i++) { for(int j = 0; j < 3; j ++) { if(i*3+j == m_NumerBtnlist.size()-1) { m_NumerBtnlist[i*3+j]->setGeometry((bgX+(j+1)*(GLB_LBUT_WIGHT+GLB_BAS_WIGHT))*factoryX,(bgY+i*(GLB_TEXT_L_HEIGHT+GLB_TAB_WIGHT))*factoryY, GLB_LBUT_WIGHT*factoryX,GLB_LBUT_HEIGHT*factoryY); break; } else { m_NumerBtnlist[i*3+j]->setGeometry((bgX+j*(GLB_LBUT_WIGHT+GLB_BAS_WIGHT))*factoryX,(bgY+i*(GLB_TEXT_L_HEIGHT+GLB_TAB_WIGHT))*factoryY, GLB_LBUT_WIGHT*factoryX,GLB_LBUT_HEIGHT*factoryY); } } } ui->buttonClean->setGeometry((bgX)*factoryX, (bgY+3*(GLB_TEXT_L_HEIGHT+GLB_TAB_WIGHT))*factoryY,GLB_LBUT_WIGHT*factoryX,GLB_LBUT_HEIGHT*factoryY); ui->buttonBack->setGeometry((bgX+2*(GLB_LBUT_WIGHT+GLB_BAS_WIGHT))*factoryX,(bgY+3*(GLB_TEXT_L_HEIGHT+GLB_TAB_WIGHT))*factoryY,GLB_LBUT_WIGHT*factoryX,GLB_LBUT_HEIGHT*factoryY); ui->buttonOk->setGeometry((bgX+1*(GLB_LBUT_WIGHT+GLB_BAS_WIGHT))*factoryX,(bgY+4*(GLB_TEXT_L_HEIGHT+GLB_TAB_WIGHT)+GLB_BAS_WIGHT)*factoryY,GLB_LBUT_WIGHT*factoryX,GLB_LBUT_HEIGHT*factoryY); ui->buttonCancel->setGeometry((bgX+2*(GLB_LBUT_WIGHT+GLB_BAS_WIGHT))*factoryX,(bgY+4*(GLB_TEXT_L_HEIGHT+GLB_TAB_WIGHT)+GLB_BAS_WIGHT)*factoryY,GLB_LBUT_WIGHT*factoryX,GLB_LBUT_HEIGHT*factoryY); } //初始化窗体控件样式 void PassWordDialog::initControlStyle() { SetStyle setControlStyle; setControlStyle.setUiName(this->objectName()); for(int i = 0; i < m_NumerBtnlist.size(); i++) { m_NumerBtnlist[i]->setStyleSheet(numButtonStyle()); m_NumerBtnlist[i]->setFont(fontSize_M()); } if(g_emTheme == theme2) { ui->frameBack->setStyleSheet(frameBackStyle()); ui->labelTitle->setStyleSheet(titleTextColour2()); }else { ui->frameBack->setStyleSheet(setControlStyle.getStyleSheet(this->objectName())); ui->labelTitle->setStyleSheet(transparentStyle()); } ui->labelTitle->setFont(fontSize_L()); ui->labelTitle->setAlignment(Qt::AlignLeft); ui->labelTitle->setAlignment(Qt::AlignVCenter); ui->labelValue->setStyleSheet(numValue()); ui->labelValue->setFont(fontSize_L()); ui->labelValue->setAlignment(Qt::AlignCenter); ui->buttonClean->setStyleSheet(numButtonStyle()); ui->buttonClean->setFont(fontSize_M()); ui->buttonBack->setStyleSheet(numButtonStyle()); ui->buttonBack->setFont(fontSize_M()); ui->buttonOk->setStyleSheet(confirmIconStyle()); ui->buttonCancel->setStyleSheet(confirmIconStyle()); if(g_emTheme == theme2) { ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet("buttonOk_1")); ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet("buttonCancel_1")); }else { ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet("buttonOk")); ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet("buttonCancel")); } } void PassWordDialog::refreshUi() { QTextCodec *cod = QTextCodec::codecForLocale(); QString showStr(""); QString password = cod->toUnicode("●"); for (int var = 0; var < m_inputStr.size(); var++) { showStr = showStr + password; } if(m_ifShow == false)//不可见 { ui->labelValue->setText(showStr); } else//可见 { ui->labelValue->setText(m_inputStr); } if(m_inputStr.length() > 0) { ui->buttonOk->setEnabled(true); } else { ui->buttonOk->setEnabled(false); } } void PassWordDialog::numerBtnClick() { QPushButton *button = (QPushButton*) this->sender() ; if(button == NULL) { return; } QString str = button->text(); m_inputStr.append(str); refreshUi(); } void PassWordDialog::setTitleStr(QString str,int cFlag) { ui->labelTitle->setText(str); m_inputStr.clear(); if(cFlag != 0) { m_cleanFlag = cFlag; ui->buttonClean->setText("."); } refreshUi(); } void PassWordDialog::setShowIfVisible(bool bShow) { m_ifShow = bShow; } void PassWordDialog::setIpStr(QString ip) { m_inputStr= ip; m_ipLength = ip.length(); refreshUi(); } QString PassWordDialog::getInputStr() { return m_inputStr; } void PassWordDialog::on_buttonClean_clicked() { if(m_cleanFlag != 0) { QString str = ui->buttonClean->text(); m_inputStr.append(str); } else { m_inputStr.clear(); } refreshUi(); } void PassWordDialog::on_buttonBack_clicked() { if(m_inputStr.length() <= m_ipLength) { return; } m_inputStr = m_inputStr.mid(0 , m_inputStr.size() - 1); refreshUi(); } void PassWordDialog::on_buttonOk_clicked() { if(m_inputStr.indexOf(".") != -1) { //检测IP地址是否合法 QRegExp regExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)"); if (!regExp.exactMatch(m_inputStr)) { PromptDialog promptDlg(this); promptDlg.initDialog(PromptDialog::BTN_OK); promptDlg.setTitleStr(tr("Prompt")); QString str = tr("IP settings are unreasonable!");//IP设置不合理! promptDlg.setContentStr(str); promptDlg.exec(); return; } } done(1); } void PassWordDialog::on_buttonCancel_clicked() { m_inputStr.clear(); done(0); }