4#include <QLoggingCategory>
7#include <QWhatsThisClickedEvent>
8#include <QDesktopServices>
10#include "RabbitCommonDir.h"
11#include "ParameterNet.h"
12#include "ParameterUser.h"
13#include "ParameterDatabaseUI.h"
14#include "ui_ParameterDatabaseUI.h"
16static Q_LOGGING_CATEGORY(log,
"Para.Database.UI")
25 setWindowTitle(tr(
"Database"));
27 ui->leDatabaseName->installEventFilter(
this);
28 ui->pbBrowser->setVisible(
false);
30 QStringList drivers = QSqlDatabase::drivers();
31 qDebug(log) <<
"Database:" << drivers;
32 QSet<QString> supportDrivers;
33 supportDrivers <<
"QSQLITE" <<
"QMYSQL" <<
"QODBC";
34 QSet<QString> drv(drivers.begin(), drivers.end());
35 QSet<QString> interDb = drv.intersect(supportDrivers);
36 QStringList lstDb(interDb.begin(), interDb.end());
37 ui->cbType->addItems(lstDb);
38 slotTypeCurrentTextChanged(ui->cbType->currentText());
39 check = connect(ui->cbType, &QComboBox::currentTextChanged,
40 this, &CParameterDatabaseUI::slotTypeCurrentTextChanged);
44CParameterDatabaseUI::~CParameterDatabaseUI()
51 m_pPara = qobject_cast<CParameterDatabase*>(pParameter);
52 if(!m_pPara)
return -1;
54 ui->wNet->SetParameter(&m_pPara->m_Net);
56 ui->cbType->setCurrentText(m_pPara->GetType());
57 ui->leDatabaseName->setText(m_pPara->GetDatabaseName());
58 ui->leOptions->setText(m_pPara->GetOptions());
66 m_pPara->SetType(ui->cbType->currentText());
68 m_pPara->SetDatabaseName(ui->leDatabaseName->text());
69 m_pPara->SetOptions(ui->leOptions->text());
74void CParameterDatabaseUI::slotTypeCurrentTextChanged(
const QString &text)
78 szMsg = tr(
"Set the database name");
80 bool bBrowser =
false;
82 if(
"QSQLITE" == text) {
83 szMsg = tr(
"Set the sqlite database file. If is empty, then use default database file.");
86 }
else if(
"QODBC" == text) {
87 szMsg = tr(
"The name can either be a DSN, a DSN filename (in which case the file must have a .dsn extension), or a connection string.");
88 szHelp = szMsg +
" <a href=https://github.com/KangLin/RabbitRemoteControl/wiki/UserManual_zh_CN#%E5%9C%A8-windows-%E4%B8%8B%E4%BD%BF%E7%94%A8-odbc-%E8%AE%BF%E9%97%AE-mysql-%E6%95%B0%E6%8D%AE%E5%BA%93>" + tr(
"Configure database") +
"</a>";
90 }
else if(
"QMYSQL" == text) {
95 szHelp = szMsg +
" <a href=https://github.com/KangLin/RabbitRemoteControl/wiki/UserManual_zh_CN#%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE%E5%BA%93>" + tr(
"Configure database") +
"</a>";
96 ui->leDatabaseName->setWhatsThis(szHelp);
97 ui->leDatabaseName->setPlaceholderText(szMsg);
98 ui->leDatabaseName->setToolTip(szMsg);
99 ui->pbBrowser->setVisible(bBrowser);
100 ui->wNet->setVisible(bNet);
103void CParameterDatabaseUI::on_pbBrowser_clicked()
107 szTitle = tr(
"Database file");
108 szFilter = tr(
"Database file (*.db);; All files (*.*)");
109 QString szFile = QFileDialog::getSaveFileName(
111 RabbitCommon::CDir::Instance()->GetDirUserDatabase(),
113 if(szFile.isEmpty())
return;
114 ui->leDatabaseName->setText(szFile);
117bool CParameterDatabaseUI::eventFilter(QObject *watched, QEvent *event)
119 if(ui->leDatabaseName == watched) {
120 if(event->type() == QEvent::WhatsThisClicked) {
121 QWhatsThisClickedEvent* e = (QWhatsThisClickedEvent*)event;
123 qDebug(log) << e->href();
124 return QDesktopServices::openUrl(e->href());
128 return QWidget::eventFilter(watched, event);
virtual int SetParameter(CParameter *pParameter) override
[override functions]
virtual int Accept() override
接受参数