From 47e4ae86a8d87ec6388d9423aba86d1498b49012 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 27 Aug 2015 17:23:55 +0200 Subject: Polish the settings editor example. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Set QtProject as organization. - Remove unneeded member variables. - Use member initialization in the constructor. - Use new connection syntax in createActions() to assemble the menu there, removing the createMenus() function. - Introduce a QSharedPointer to ensure settings are deleted. Previously, the settings were parented on the tree widget, which is a hack of sorts. - Fix OS X macros. Change-Id: Ibbc6bfb03eb5c7eda077b1a3aa3f1707667f7f13 Reviewed-by: Topi Reiniƶ Reviewed-by: Joerg Bornemann --- .../tools/settingseditor/locationdialog.cpp | 50 +++--- .../widgets/tools/settingseditor/locationdialog.h | 2 + examples/widgets/tools/settingseditor/main.cpp | 3 + .../widgets/tools/settingseditor/mainwindow.cpp | 182 ++++++++++----------- examples/widgets/tools/settingseditor/mainwindow.h | 18 +- .../widgets/tools/settingseditor/settingstree.cpp | 49 +++--- .../widgets/tools/settingseditor/settingstree.h | 8 +- 7 files changed, 151 insertions(+), 161 deletions(-) (limited to 'examples/widgets/tools/settingseditor') diff --git a/examples/widgets/tools/settingseditor/locationdialog.cpp b/examples/widgets/tools/settingseditor/locationdialog.cpp index 31c221f5d9..ad7f7e2ce5 100644 --- a/examples/widgets/tools/settingseditor/locationdialog.cpp +++ b/examples/widgets/tools/settingseditor/locationdialog.cpp @@ -54,17 +54,18 @@ LocationDialog::LocationDialog(QWidget *parent) scopeComboBox->addItem(tr("System")); organizationComboBox = new QComboBox; - organizationComboBox->addItem(tr("Qt")); + organizationComboBox->addItem(tr("QtProject")); organizationComboBox->setEditable(true); applicationComboBox = new QComboBox; applicationComboBox->addItem(tr("Any")); + applicationComboBox->addItem(tr("Qt Creator")); applicationComboBox->addItem(tr("Application Example")); applicationComboBox->addItem(tr("Assistant")); applicationComboBox->addItem(tr("Designer")); applicationComboBox->addItem(tr("Linguist")); applicationComboBox->setEditable(true); - applicationComboBox->setCurrentIndex(3); + applicationComboBox->setCurrentIndex(1); formatLabel = new QLabel(tr("&Format:")); formatLabel->setBuddy(formatComboBox); @@ -91,28 +92,30 @@ LocationDialog::LocationDialog(QWidget *parent) locationsTable->setHorizontalHeaderLabels(labels); locationsTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); locationsTable->horizontalHeader()->resizeSection(1, 180); + connect(locationsTable, &QTableWidget::itemActivated, this, &LocationDialog::itemActivated); - buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok - | QDialogButtonBox::Cancel); + buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - connect(formatComboBox, SIGNAL(activated(int)), - this, SLOT(updateLocationsTable())); - connect(scopeComboBox, SIGNAL(activated(int)), - this, SLOT(updateLocationsTable())); + typedef void (QComboBox::*QComboIntSignal)(int); + connect(formatComboBox, static_cast(&QComboBox::activated), + this, &LocationDialog::updateLocationsTable); + connect(scopeComboBox, static_cast(&QComboBox::activated), + this, &LocationDialog::updateLocationsTable); connect(organizationComboBox->lineEdit(), - SIGNAL(editingFinished()), - this, SLOT(updateLocationsTable())); + &QLineEdit::editingFinished, + this, &LocationDialog::updateLocationsTable); connect(applicationComboBox->lineEdit(), - SIGNAL(editingFinished()), - this, SLOT(updateLocationsTable())); - connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); - - QVBoxLayout *locationsLayout = new QVBoxLayout; + &QLineEdit::editingFinished, + this, &LocationDialog::updateLocationsTable); + connect(applicationComboBox, static_cast(&QComboBox::activated), + this, &LocationDialog::updateLocationsTable); + connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); + connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); + + QVBoxLayout *locationsLayout = new QVBoxLayout(locationsGroupBox); locationsLayout->addWidget(locationsTable); - locationsGroupBox->setLayout(locationsLayout); - QGridLayout *mainLayout = new QGridLayout; + QGridLayout *mainLayout = new QGridLayout(this); mainLayout->addWidget(formatLabel, 0, 0); mainLayout->addWidget(formatComboBox, 0, 1); mainLayout->addWidget(scopeLabel, 1, 0); @@ -123,7 +126,6 @@ LocationDialog::LocationDialog(QWidget *parent) mainLayout->addWidget(applicationComboBox, 3, 1); mainLayout->addWidget(locationsGroupBox, 4, 0, 1, 2); mainLayout->addWidget(buttonBox, 5, 0, 1, 2); - setLayout(mainLayout); updateLocationsTable(); @@ -155,11 +157,16 @@ QString LocationDialog::organization() const QString LocationDialog::application() const { if (applicationComboBox->currentText() == tr("Any")) - return ""; + return QString(); else return applicationComboBox->currentText(); } +void LocationDialog::itemActivated(QTableWidgetItem *) +{ + buttonBox->button(QDialogButtonBox::Ok)->animateClick(); +} + void LocationDialog::updateLocationsTable() { locationsTable->setUpdatesEnabled(false); @@ -184,8 +191,7 @@ void LocationDialog::updateLocationsTable() int row = locationsTable->rowCount(); locationsTable->setRowCount(row + 1); - QTableWidgetItem *item0 = new QTableWidgetItem; - item0->setText(settings.fileName()); + QTableWidgetItem *item0 = new QTableWidgetItem(QDir::toNativeSeparators(settings.fileName())); QTableWidgetItem *item1 = new QTableWidgetItem; bool disable = (settings.childKeys().isEmpty() diff --git a/examples/widgets/tools/settingseditor/locationdialog.h b/examples/widgets/tools/settingseditor/locationdialog.h index 5bb68d54df..d6f0225a31 100644 --- a/examples/widgets/tools/settingseditor/locationdialog.h +++ b/examples/widgets/tools/settingseditor/locationdialog.h @@ -50,6 +50,7 @@ class QDialogButtonBox; class QGroupBox; class QLabel; class QTableWidget; +class QTableWidgetItem; QT_END_NAMESPACE class LocationDialog : public QDialog @@ -66,6 +67,7 @@ public: private slots: void updateLocationsTable(); + void itemActivated(QTableWidgetItem *); private: QLabel *formatLabel; diff --git a/examples/widgets/tools/settingseditor/main.cpp b/examples/widgets/tools/settingseditor/main.cpp index 842a474405..0947efd817 100644 --- a/examples/widgets/tools/settingseditor/main.cpp +++ b/examples/widgets/tools/settingseditor/main.cpp @@ -45,6 +45,9 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); + QCoreApplication::setApplicationName("Settings Editor"); + QCoreApplication::setApplicationVersion(QT_VERSION_STR); + MainWindow mainWin; mainWin.show(); return app.exec(); diff --git a/examples/widgets/tools/settingseditor/mainwindow.cpp b/examples/widgets/tools/settingseditor/mainwindow.cpp index 078a84576d..dbc8309eef 100644 --- a/examples/widgets/tools/settingseditor/mainwindow.cpp +++ b/examples/widgets/tools/settingseditor/mainwindow.cpp @@ -45,20 +45,20 @@ #include "settingstree.h" MainWindow::MainWindow() + : settingsTree(new SettingsTree) + , locationDialog(Q_NULLPTR) { - settingsTree = new SettingsTree; setCentralWidget(settingsTree); - locationDialog = 0; - createActions(); - createMenus(); autoRefreshAct->setChecked(true); fallbacksAct->setChecked(true); - setWindowTitle(tr("Settings Editor")); - resize(500, 600); + setWindowTitle(QCoreApplication::applicationName()); + const QRect availableGeometry = QApplication::desktop()->availableGeometry(this); + adjustSize(); + move((availableGeometry.width() - width()) / 2, (availableGeometry.height() - height()) / 2); } void MainWindow::openSettings() @@ -66,49 +66,60 @@ void MainWindow::openSettings() if (!locationDialog) locationDialog = new LocationDialog(this); - if (locationDialog->exec()) { - QSettings *settings = new QSettings(locationDialog->format(), - locationDialog->scope(), - locationDialog->organization(), - locationDialog->application()); - setSettingsObject(settings); - fallbacksAct->setEnabled(true); - } + if (locationDialog->exec() != QDialog::Accepted) + return; + + SettingsPtr settings(new QSettings(locationDialog->format(), + locationDialog->scope(), + locationDialog->organization(), + locationDialog->application())); + + setSettingsObject(settings); + fallbacksAct->setEnabled(true); } void MainWindow::openIniFile() { - QString fileName = QFileDialog::getOpenFileName(this, tr("Open INI File"), - "", tr("INI Files (*.ini *.conf)")); - if (!fileName.isEmpty()) { - QSettings *settings = new QSettings(fileName, QSettings::IniFormat); - setSettingsObject(settings); - fallbacksAct->setEnabled(false); - } + const QString directory = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); + const QString fileName = + QFileDialog::getOpenFileName(this, tr("Open INI File"), + directory, tr("INI Files (*.ini *.conf)")); + if (fileName.isEmpty()) + return; + + SettingsPtr settings(new QSettings(fileName, QSettings::IniFormat)); + + setSettingsObject(settings); + fallbacksAct->setEnabled(false); } void MainWindow::openPropertyList() { - QString fileName = QFileDialog::getOpenFileName(this, - tr("Open Property List"), - "", tr("Property List Files (*.plist)")); - if (!fileName.isEmpty()) { - QSettings *settings = new QSettings(fileName, QSettings::NativeFormat); - setSettingsObject(settings); - fallbacksAct->setEnabled(false); - } + const QString directory = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); + const QString fileName = + QFileDialog::getOpenFileName(this, tr("Open Property List"), + directory, tr("Property List Files (*.plist)")); + if (fileName.isEmpty()) + return; + + SettingsPtr settings(new QSettings(fileName, QSettings::NativeFormat)); + setSettingsObject(settings); + fallbacksAct->setEnabled(false); } void MainWindow::openRegistryPath() { - QString path = QInputDialog::getText(this, tr("Open Registry Path"), - tr("Enter the path in the Windows registry:"), - QLineEdit::Normal, "HKEY_CURRENT_USER\\"); - if (!path.isEmpty()) { - QSettings *settings = new QSettings(path, QSettings::NativeFormat); - setSettingsObject(settings); - fallbacksAct->setEnabled(false); - } + const QString path = + QInputDialog::getText(this, tr("Open Registry Path"), + tr("Enter the path in the Windows registry:"), + QLineEdit::Normal, "HKEY_CURRENT_USER\\"); + if (path.isEmpty()) + return; + + SettingsPtr settings(new QSettings(path, QSettings::NativeFormat)); + + setSettingsObject(settings); + fallbacksAct->setEnabled(false); } void MainWindow::about() @@ -120,88 +131,59 @@ void MainWindow::about() void MainWindow::createActions() { - openSettingsAct = new QAction(tr("&Open Application Settings..."), this); + QMenu *fileMenu = menuBar()->addMenu(tr("&File")); + + QAction *openSettingsAct = fileMenu->addAction(tr("&Open Application Settings..."), this, &MainWindow::openSettings); openSettingsAct->setShortcuts(QKeySequence::Open); - connect(openSettingsAct, SIGNAL(triggered()), this, SLOT(openSettings())); - openIniFileAct = new QAction(tr("Open I&NI File..."), this); + QAction *openIniFileAct = fileMenu->addAction(tr("Open I&NI File..."), this, &MainWindow::openIniFile); openIniFileAct->setShortcut(tr("Ctrl+N")); - connect(openIniFileAct, SIGNAL(triggered()), this, SLOT(openIniFile())); - openPropertyListAct = new QAction(tr("Open Mac &Property List..."), this); +#ifdef Q_OS_OSX + QAction *openPropertyListAct = fileMenu->addAction(tr("Open Apple &Property List..."), this, &MainWindow::openPropertyList); openPropertyListAct->setShortcut(tr("Ctrl+P")); - connect(openPropertyListAct, SIGNAL(triggered()), - this, SLOT(openPropertyList())); +#endif // Q_OS_OSX - openRegistryPathAct = new QAction(tr("Open Windows &Registry Path..."), - this); +#ifdef Q_OS_WIN + QAction *openRegistryPathAct = fileMenu->addAction(tr("Open Windows &Registry Path..."), this, &MainWindow::openRegistryPath); openRegistryPathAct->setShortcut(tr("Ctrl+G")); - connect(openRegistryPathAct, SIGNAL(triggered()), - this, SLOT(openRegistryPath())); +#endif // Q_OS_WIN + + fileMenu->addSeparator(); - refreshAct = new QAction(tr("&Refresh"), this); + refreshAct = fileMenu->addAction(tr("&Refresh"), settingsTree, &SettingsTree::refresh); refreshAct->setShortcut(tr("Ctrl+R")); refreshAct->setEnabled(false); - connect(refreshAct, SIGNAL(triggered()), settingsTree, SLOT(refresh())); - exitAct = new QAction(tr("E&xit"), this); + fileMenu->addSeparator(); + + QAction *exitAct = fileMenu->addAction(tr("E&xit"), this, &QWidget::close); exitAct->setShortcuts(QKeySequence::Quit); - connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); - autoRefreshAct = new QAction(tr("&Auto-Refresh"), this); + QMenu *optionsMenu = menuBar()->addMenu(tr("&Options")); + + autoRefreshAct = optionsMenu->addAction(tr("&Auto-Refresh")); autoRefreshAct->setShortcut(tr("Ctrl+A")); autoRefreshAct->setCheckable(true); autoRefreshAct->setEnabled(false); - connect(autoRefreshAct, SIGNAL(triggered(bool)), - settingsTree, SLOT(setAutoRefresh(bool))); - connect(autoRefreshAct, SIGNAL(triggered(bool)), - refreshAct, SLOT(setDisabled(bool))); + connect(autoRefreshAct, &QAction::triggered, + settingsTree, &SettingsTree::setAutoRefresh); + connect(autoRefreshAct, &QAction::triggered, + refreshAct, &QAction::setDisabled); - fallbacksAct = new QAction(tr("&Fallbacks"), this); + fallbacksAct = optionsMenu->addAction(tr("&Fallbacks")); fallbacksAct->setShortcut(tr("Ctrl+F")); fallbacksAct->setCheckable(true); fallbacksAct->setEnabled(false); - connect(fallbacksAct, SIGNAL(triggered(bool)), - settingsTree, SLOT(setFallbacksEnabled(bool))); - - aboutAct = new QAction(tr("&About"), this); - connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); - - aboutQtAct = new QAction(tr("About &Qt"), this); - connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); - -#ifndef Q_OS_MAC - openPropertyListAct->setEnabled(false); -#endif -#ifndef Q_OS_WIN - openRegistryPathAct->setEnabled(false); -#endif -} - -void MainWindow::createMenus() -{ - fileMenu = menuBar()->addMenu(tr("&File")); - fileMenu->addAction(openSettingsAct); - fileMenu->addAction(openIniFileAct); - fileMenu->addAction(openPropertyListAct); - fileMenu->addAction(openRegistryPathAct); - fileMenu->addSeparator(); - fileMenu->addAction(refreshAct); - fileMenu->addSeparator(); - fileMenu->addAction(exitAct); - - optionsMenu = menuBar()->addMenu(tr("&Options")); - optionsMenu->addAction(autoRefreshAct); - optionsMenu->addAction(fallbacksAct); - - menuBar()->addSeparator(); + connect(fallbacksAct, &QAction::triggered, + settingsTree, &SettingsTree::setFallbacksEnabled); - helpMenu = menuBar()->addMenu(tr("&Help")); - helpMenu->addAction(aboutAct); - helpMenu->addAction(aboutQtAct); + QMenu *helpMenu = menuBar()->addMenu(tr("&Help")); + helpMenu->addAction(tr("&About"), this, &MainWindow::about); + helpMenu->addAction(tr("About &Qt"), qApp, &QCoreApplication::quit); } -void MainWindow::setSettingsObject(QSettings *settings) +void MainWindow::setSettingsObject(const SettingsPtr &settings) { settings->setFallbacksEnabled(fallbacksAct->isChecked()); settingsTree->setSettingsObject(settings); @@ -209,14 +191,14 @@ void MainWindow::setSettingsObject(QSettings *settings) refreshAct->setEnabled(true); autoRefreshAct->setEnabled(true); - QString niceName = settings->fileName(); - niceName.replace("\\", "/"); - int pos = niceName.lastIndexOf("/"); + QString niceName = QDir::cleanPath(settings->fileName()); + int pos = niceName.lastIndexOf(QLatin1Char('/')); if (pos != -1) niceName.remove(0, pos + 1); if (!settings->isWritable()) niceName = tr("%1 (read only)").arg(niceName); - setWindowTitle(tr("%1 - %2").arg(niceName).arg(tr("Settings Editor"))); + setWindowTitle(tr("%1 - %2").arg(niceName, QCoreApplication::applicationName())); + statusBar()->showMessage(tr("Opened \"%1\"").arg(QDir::toNativeSeparators(settings->fileName()))); } diff --git a/examples/widgets/tools/settingseditor/mainwindow.h b/examples/widgets/tools/settingseditor/mainwindow.h index 55180c3771..4b1a28dfba 100644 --- a/examples/widgets/tools/settingseditor/mainwindow.h +++ b/examples/widgets/tools/settingseditor/mainwindow.h @@ -42,10 +42,10 @@ #define MAINWINDOW_H #include +#include QT_BEGIN_NAMESPACE class QAction; -class QMenu; class QSettings; QT_END_NAMESPACE class LocationDialog; @@ -56,6 +56,8 @@ class MainWindow : public QMainWindow Q_OBJECT public: + typedef QSharedPointer SettingsPtr; + MainWindow(); private slots: @@ -67,25 +69,13 @@ private slots: private: void createActions(); - void createMenus(); - void setSettingsObject(QSettings *settings); + void setSettingsObject(const SettingsPtr &settings); SettingsTree *settingsTree; LocationDialog *locationDialog; - - QMenu *fileMenu; - QMenu *optionsMenu; - QMenu *helpMenu; - QAction *openSettingsAct; - QAction *openIniFileAct; - QAction *openPropertyListAct; - QAction *openRegistryPathAct; QAction *refreshAct; - QAction *exitAct; QAction *autoRefreshAct; QAction *fallbacksAct; - QAction *aboutAct; - QAction *aboutQtAct; }; #endif diff --git a/examples/widgets/tools/settingseditor/settingstree.cpp b/examples/widgets/tools/settingseditor/settingstree.cpp index d9d53968ef..b75e3bdc54 100644 --- a/examples/widgets/tools/settingseditor/settingstree.cpp +++ b/examples/widgets/tools/settingseditor/settingstree.cpp @@ -45,18 +45,18 @@ SettingsTree::SettingsTree(QWidget *parent) : QTreeWidget(parent) + , autoRefresh(false) { setItemDelegate(new VariantDelegate(this)); QStringList labels; labels << tr("Setting") << tr("Type") << tr("Value"); setHeaderLabels(labels); - header()->setSectionResizeMode(0, QHeaderView::Stretch); + header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); + header()->setSectionResizeMode(1, QHeaderView::ResizeToContents); header()->setSectionResizeMode(2, QHeaderView::Stretch); - settings = 0; refreshTimer.setInterval(2000); - autoRefresh = false; groupIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirClosedIcon), QIcon::Normal, QIcon::Off); @@ -64,34 +64,37 @@ SettingsTree::SettingsTree(QWidget *parent) QIcon::Normal, QIcon::On); keyIcon.addPixmap(style()->standardPixmap(QStyle::SP_FileIcon)); - connect(&refreshTimer, SIGNAL(timeout()), this, SLOT(maybeRefresh())); + connect(&refreshTimer, &QTimer::timeout, this, &SettingsTree::maybeRefresh); } -void SettingsTree::setSettingsObject(QSettings *settings) +SettingsTree::~SettingsTree() { - delete this->settings; - this->settings = settings; +} + +void SettingsTree::setSettingsObject(const SettingsPtr &newSettings) +{ + settings = newSettings; clear(); - if (settings) { - settings->setParent(this); + if (settings.isNull()) { + refreshTimer.stop(); + } else { refresh(); if (autoRefresh) refreshTimer.start(); - } else { - refreshTimer.stop(); } } QSize SettingsTree::sizeHint() const { - return QSize(800, 600); + const QRect availableGeometry = QApplication::desktop()->availableGeometry(this); + return QSize(availableGeometry.width() * 2 / 3, availableGeometry.height() * 2 / 3); } void SettingsTree::setAutoRefresh(bool autoRefresh) { this->autoRefresh = autoRefresh; - if (settings) { + if (!settings.isNull()) { if (autoRefresh) { maybeRefresh(); refreshTimer.start(); @@ -103,7 +106,7 @@ void SettingsTree::setAutoRefresh(bool autoRefresh) void SettingsTree::setFallbacksEnabled(bool enabled) { - if (settings) { + if (!settings.isNull()) { settings->setFallbacksEnabled(enabled); refresh(); } @@ -117,17 +120,17 @@ void SettingsTree::maybeRefresh() void SettingsTree::refresh() { - if (!settings) + if (settings.isNull()) return; - disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), - this, SLOT(updateSetting(QTreeWidgetItem*))); + disconnect(this, &QTreeWidget::itemChanged, + this, &SettingsTree::updateSetting); settings->sync(); updateChildItems(0); - connect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), - this, SLOT(updateSetting(QTreeWidgetItem*))); + connect(this, &QTreeWidget::itemChanged, + this, &SettingsTree::updateSetting); } bool SettingsTree::event(QEvent *event) @@ -144,7 +147,7 @@ void SettingsTree::updateSetting(QTreeWidgetItem *item) QString key = item->text(0); QTreeWidgetItem *ancestor = item->parent(); while (ancestor) { - key.prepend(ancestor->text(0) + "/"); + key.prepend(ancestor->text(0) + QLatin1Char('/')); ancestor = ancestor->parent(); } @@ -162,8 +165,8 @@ void SettingsTree::updateChildItems(QTreeWidgetItem *parent) int childIndex = findChild(parent, group, dividerIndex); if (childIndex != -1) { child = childAt(parent, childIndex); - child->setText(1, ""); - child->setText(2, ""); + child->setText(1, QString()); + child->setText(2, QString()); child->setData(2, Qt::UserRole, QVariant()); moveItemForward(parent, childIndex, dividerIndex); } else { @@ -177,7 +180,7 @@ void SettingsTree::updateChildItems(QTreeWidgetItem *parent) settings->endGroup(); } - foreach (QString key, settings->childKeys()) { + foreach (const QString &key, settings->childKeys()) { QTreeWidgetItem *child; int childIndex = findChild(parent, key, 0); diff --git a/examples/widgets/tools/settingseditor/settingstree.h b/examples/widgets/tools/settingseditor/settingstree.h index 2a64a5a496..4f542d2543 100644 --- a/examples/widgets/tools/settingseditor/settingstree.h +++ b/examples/widgets/tools/settingseditor/settingstree.h @@ -44,6 +44,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE class QSettings; @@ -54,9 +55,12 @@ class SettingsTree : public QTreeWidget Q_OBJECT public: + typedef QSharedPointer SettingsPtr; + SettingsTree(QWidget *parent = 0); + ~SettingsTree(); - void setSettingsObject(QSettings *settings); + void setSettingsObject(const SettingsPtr &settings); QSize sizeHint() const Q_DECL_OVERRIDE; public slots: @@ -80,7 +84,7 @@ private: int findChild(QTreeWidgetItem *parent, const QString &text, int startIndex); void moveItemForward(QTreeWidgetItem *parent, int oldIndex, int newIndex); - QSettings *settings; + SettingsPtr settings; QTimer refreshTimer; bool autoRefresh; QIcon groupIcon; -- cgit v1.2.3