qtbase/examples/sql/sqlbrowser/qsqlconnectiondialog.cpp
Marc Mutz 8dbd0828e9 sqlbrowser example: use idiomatic Qt [2/3]: use button-box / override accept()
- The old code used two QPushButtons in a QHBoxLayout to provide
  Ok/Cancel buttons. This hard-codes the positions and text (and
  icons) of these buttons, instead of adapting to the platform style.

  The new code simply uses QDialogButtonBox, which is designed for
  this purpose.

- Also, the old code connected the Ok button's clicked() signal to a
  custom slot that then called QDialog::accept(). This means that the
  code in the custom slot is not executed when the dialog is accepted
  by other means (e.g. return press in one of the line edits
  ("auto-default"), though I'm not sure here).

  The new code uses the idiomatic Qt way of overriding
  QDialog::accept() instead, and connects the button-box's accepted()
  signal to it. This is done in the .ui file, so it already works in
  Designer preview.

- Finally, the old code made a manual connection from the Cancel
  button to QDialog::reject().

  The new code uses the Qt idiom of connecting in the .ui file
  directly, using QDialogButtonBox::rejected() as the signal.

Amends 2690822428deec4f0c08f4d118d69a7c6036369e, which, however,
inherited all of the above from even older code.

Pick-to: 6.8
Change-Id: I83afd6156a0811e0c0f99f2480625ea6b69ff78b
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 3419c299369ac1da94ba5710aaf5f5f65c38c33c)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2025-01-02 09:57:23 +00:00

76 lines
1.6 KiB
C++

// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "qsqlconnectiondialog.h"
#include <ui_qsqlconnectiondialog.h>
#include <QCheckBox>
#include <QMessageBox>
#include <QPushButton>
#include <QSqlDatabase>
QSqlConnectionDialog::QSqlConnectionDialog(QWidget *parent)
: QDialog(parent)
, m_ui(new Ui::QSqlConnectionDialogUi)
{
m_ui->setupUi(this);
QStringList drivers = QSqlDatabase::drivers();
if (!drivers.contains("QSQLITE"))
m_ui->dbCheckBox->setEnabled(false);
m_ui->comboDriver->addItems(drivers);
}
QSqlConnectionDialog::~QSqlConnectionDialog()
{
delete m_ui;
}
QString QSqlConnectionDialog::driverName() const
{
return m_ui->comboDriver->currentText();
}
QString QSqlConnectionDialog::databaseName() const
{
return m_ui->editDatabase->text();
}
QString QSqlConnectionDialog::userName() const
{
return m_ui->editUsername->text();
}
QString QSqlConnectionDialog::password() const
{
return m_ui->editPassword->text();
}
QString QSqlConnectionDialog::hostName() const
{
return m_ui->editHostname->text();
}
int QSqlConnectionDialog::port() const
{
return m_ui->portSpinBox->value();
}
bool QSqlConnectionDialog::useInMemoryDatabase() const
{
return m_ui->dbCheckBox->isChecked();
}
void QSqlConnectionDialog::accept()
{
if (m_ui->comboDriver->currentText().isEmpty()) {
QMessageBox::information(this, tr("No database driver selected"),
tr("Please select a database driver"));
m_ui->comboDriver->setFocus();
} else {
QDialog::accept();
}
}