#include "connInfoEditDialog.h" #include "./ui_connInfoEditDialog.h" #include "maskLayer.h" #include "mainwindow.h" #include "settings.h" #include "customBorderContainer.h" ConnInfoEditDialog::ConnInfoEditDialog(QWidget *parent) : QDialog(parent) , ui(new Ui::ConnInfoEditDialog) , m_pMainWindow(nullptr) { ui->setupUi(this); if(QSysInfo::kernelType() == "linux") { //Linux下默认的Qt::Dialog即使有父窗口也无法按照子窗口的行为进行展示,并且最大、最小按钮不好关闭,因此需要去掉Dialog属性,随之而来的问题是,模态无法起作用 setWindowFlags(windowFlags() & ~Qt::Dialog); setStyleSheet("QDialog{border: 1px solid rgb(205,205,205);border-radius:5px;background-color:rgb(245,245,245);}"); m_customBorderContainer = new CustomBorderContainer(this); m_customBorderContainer->setOperationOptions(CustomBorderContainer::Movable | CustomBorderContainer::Resizable); } initialize(); } ConnInfoEditDialog::~ConnInfoEditDialog() { delete ui; } void ConnInfoEditDialog::initialize() { m_connID = ""; m_pMaskLayer = new MaskLayer(this); QIntValidator* validator = new QIntValidator(0, 9999, this); ui->lineEdit_port->setValidator(validator); ui->lineEdit_password->setEchoMode(QLineEdit::Password); connect(ui->btnSave, &QPushButton::clicked, this, &ConnInfoEditDialog::onBtnClicked_save); connect(ui->btnCancle, &QPushButton::clicked, this, &ConnInfoEditDialog::onBtnClicked_cancle); connect(ui->comboBox_dbType, &QComboBox::currentTextChanged, this, &ConnInfoEditDialog::onComboxChanged_dbType); } void ConnInfoEditDialog::setErrorInfo(const QString& info) { if(m_pMainWindow) m_pMainWindow->showMessageDialog(type_warning, QString::fromWCharArray(L"错误"),info); else ui->label_error->setText(info); } void ConnInfoEditDialog::clearErrorInfo() { if(m_pMainWindow) m_pMainWindow->hideMessageDialog(); else ui->label_error->setText(""); } void ConnInfoEditDialog::showMask() { m_pMaskLayer->setGeometry(0, 0, this->width(), this->height()); m_pMaskLayer->show(); } void ConnInfoEditDialog::hideMask() { m_pMaskLayer->close(); } void ConnInfoEditDialog::loadConnInfo(const QString& connID) { DatabaseConfig config = Settings::instance().loadDatabaseConfig(connID); ui->lineEdit_connection->setText(config.strConnectionName); ui->lineEdit_hostName->setText(config.strHost); ui->lineEdit_port->setText(QString::number(config.nPort)); ui->lineEdit_userName->setText(config.strUserName); ui->lineEdit_password->setText(config.strPassword); ui->lineEdit_dbName->setText(config.strDBName); if(config.strDBType == "QPSQL") ui->comboBox_dbType->setCurrentText("PostgreSQL"); else if(config.strDBType == "QMYSQL") ui->comboBox_dbType->setCurrentText("MySQL"); ui->plainTextEdit->setPlainText(config.strComment); m_connID = connID; } void ConnInfoEditDialog::onBtnClicked_save() { if(ui->lineEdit_connection->text() == "" || ui->lineEdit_hostName->text() == "" || ui->lineEdit_userName->text() == "" || ui->lineEdit_password->text() == "" || ui->lineEdit_port->text() == "") { setErrorInfo(QString::fromWCharArray(L"除‘备注’外不能有其它信息为空")); return; } DatabaseConfig config; config.strConnectionName = ui->lineEdit_connection->text(); config.strHost = ui->lineEdit_hostName->text(); config.nPort = ui->lineEdit_port->text().toInt(); config.strUserName = ui->lineEdit_userName->text(); config.strPassword = ui->lineEdit_password->text(); config.strDBName = ui->lineEdit_dbName->text(); if(ui->comboBox_dbType->currentText() == "PostgreSQL") config.strDBType = "QPSQL"; else if(ui->comboBox_dbType->currentText() == "MySQL") config.strDBType = "QMYSQL"; if(ui->plainTextEdit->toPlainText().isEmpty()) config.strComment = QString::fromWCharArray(L"无"); else config.strComment = ui->plainTextEdit->toPlainText(); Settings::instance().saveDatabaseConfig(config); } void ConnInfoEditDialog::onBtnClicked_cancle() { close(); } void ConnInfoEditDialog::onComboxChanged_dbType(const QString& text) { if(text == "PostgreSQL") ui->lineEdit_port->setText("5432"); else if(text == "MySQL") ui->lineEdit_port->setText("3306"); }