From cb961007c534b260b779ed513d33843a9dce01f4 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Tue, 27 Nov 2012 14:18:41 +0100 Subject: Examples: move widgets specific "tools" examples to the correct place examples/tools -> examples/widgets/tools Change-Id: I8b9e23c45e07ce5cd9da8f24a9a9f7ae10b2b107 Reviewed-by: hjk --- examples/widgets/tools/treemodelcompleter/main.cpp | 54 +++++ .../tools/treemodelcompleter/mainwindow.cpp | 246 +++++++++++++++++++++ .../widgets/tools/treemodelcompleter/mainwindow.h | 88 ++++++++ .../treemodelcompleter/resources/treemodel.txt | 20 ++ .../treemodelcompleter/treemodelcompleter.cpp | 97 ++++++++ .../treemodelcompleter/treemodelcompleter.desktop | 11 + .../tools/treemodelcompleter/treemodelcompleter.h | 70 ++++++ .../treemodelcompleter/treemodelcompleter.pro | 16 ++ .../treemodelcompleter/treemodelcompleter.qrc | 5 + 9 files changed, 607 insertions(+) create mode 100644 examples/widgets/tools/treemodelcompleter/main.cpp create mode 100644 examples/widgets/tools/treemodelcompleter/mainwindow.cpp create mode 100644 examples/widgets/tools/treemodelcompleter/mainwindow.h create mode 100644 examples/widgets/tools/treemodelcompleter/resources/treemodel.txt create mode 100644 examples/widgets/tools/treemodelcompleter/treemodelcompleter.cpp create mode 100644 examples/widgets/tools/treemodelcompleter/treemodelcompleter.desktop create mode 100644 examples/widgets/tools/treemodelcompleter/treemodelcompleter.h create mode 100644 examples/widgets/tools/treemodelcompleter/treemodelcompleter.pro create mode 100644 examples/widgets/tools/treemodelcompleter/treemodelcompleter.qrc (limited to 'examples/widgets/tools/treemodelcompleter') diff --git a/examples/widgets/tools/treemodelcompleter/main.cpp b/examples/widgets/tools/treemodelcompleter/main.cpp new file mode 100644 index 0000000000..65990ca54c --- /dev/null +++ b/examples/widgets/tools/treemodelcompleter/main.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "mainwindow.h" + +//! [0] +int main(int argc, char *argv[]) +{ + Q_INIT_RESOURCE(treemodelcompleter); + + QApplication app(argc, argv); + MainWindow window; + window.show(); + return app.exec(); +} +//! [0] diff --git a/examples/widgets/tools/treemodelcompleter/mainwindow.cpp b/examples/widgets/tools/treemodelcompleter/mainwindow.cpp new file mode 100644 index 0000000000..851fde5fff --- /dev/null +++ b/examples/widgets/tools/treemodelcompleter/mainwindow.cpp @@ -0,0 +1,246 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "treemodelcompleter.h" +#include "mainwindow.h" + +//! [0] +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent), completer(0), lineEdit(0) +{ + createMenu(); + + completer = new TreeModelCompleter(this); + completer->setModel(modelFromFile(":/resources/treemodel.txt")); + completer->setSeparator(QLatin1String(".")); + QObject::connect(completer, SIGNAL(highlighted(QModelIndex)), + this, SLOT(highlight(QModelIndex))); + + QWidget *centralWidget = new QWidget; + + QLabel *modelLabel = new QLabel; + modelLabel->setText(tr("Tree Model
(Double click items to edit)")); + + QLabel *modeLabel = new QLabel; + modeLabel->setText(tr("Completion Mode")); + modeCombo = new QComboBox; + modeCombo->addItem(tr("Inline")); + modeCombo->addItem(tr("Filtered Popup")); + modeCombo->addItem(tr("Unfiltered Popup")); + modeCombo->setCurrentIndex(1); + + QLabel *caseLabel = new QLabel; + caseLabel->setText(tr("Case Sensitivity")); + caseCombo = new QComboBox; + caseCombo->addItem(tr("Case Insensitive")); + caseCombo->addItem(tr("Case Sensitive")); + caseCombo->setCurrentIndex(0); +//! [0] + +//! [1] + QLabel *separatorLabel = new QLabel; + separatorLabel->setText(tr("Tree Separator")); + + QLineEdit *separatorLineEdit = new QLineEdit; + separatorLineEdit->setText(completer->separator()); + connect(separatorLineEdit, SIGNAL(textChanged(QString)), + completer, SLOT(setSeparator(QString))); + + QCheckBox *wrapCheckBox = new QCheckBox; + wrapCheckBox->setText(tr("Wrap around completions")); + wrapCheckBox->setChecked(completer->wrapAround()); + connect(wrapCheckBox, SIGNAL(clicked(bool)), completer, SLOT(setWrapAround(bool))); + + contentsLabel = new QLabel; + contentsLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + connect(separatorLineEdit, SIGNAL(textChanged(QString)), + this, SLOT(updateContentsLabel(QString))); + + treeView = new QTreeView; + treeView->setModel(completer->model()); + treeView->header()->hide(); + treeView->expandAll(); +//! [1] + +//! [2] + connect(modeCombo, SIGNAL(activated(int)), this, SLOT(changeMode(int))); + connect(caseCombo, SIGNAL(activated(int)), this, SLOT(changeCase(int))); + + lineEdit = new QLineEdit; + lineEdit->setCompleter(completer); +//! [2] + +//! [3] + QGridLayout *layout = new QGridLayout; + layout->addWidget(modelLabel, 0, 0); layout->addWidget(treeView, 0, 1); + layout->addWidget(modeLabel, 1, 0); layout->addWidget(modeCombo, 1, 1); + layout->addWidget(caseLabel, 2, 0); layout->addWidget(caseCombo, 2, 1); + layout->addWidget(separatorLabel, 3, 0); layout->addWidget(separatorLineEdit, 3, 1); + layout->addWidget(wrapCheckBox, 4, 0); + layout->addWidget(contentsLabel, 5, 0, 1, 2); + layout->addWidget(lineEdit, 6, 0, 1, 2); + centralWidget->setLayout(layout); + setCentralWidget(centralWidget); + + changeCase(caseCombo->currentIndex()); + changeMode(modeCombo->currentIndex()); + + setWindowTitle(tr("Tree Model Completer")); + lineEdit->setFocus(); +} +//! [3] + +//! [4] +void MainWindow::createMenu() +{ + QAction *exitAction = new QAction(tr("Exit"), this); + QAction *aboutAct = new QAction(tr("About"), this); + QAction *aboutQtAct = new QAction(tr("About Qt"), this); + + connect(exitAction, SIGNAL(triggered()), qApp, SLOT(quit())); + connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); + connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); + + QMenu* fileMenu = menuBar()->addMenu(tr("File")); + fileMenu->addAction(exitAction); + + QMenu* helpMenu = menuBar()->addMenu(tr("About")); + helpMenu->addAction(aboutAct); + helpMenu->addAction(aboutQtAct); +} +//! [4] + +//! [5] +void MainWindow::changeMode(int index) +{ + QCompleter::CompletionMode mode; + if (index == 0) + mode = QCompleter::InlineCompletion; + else if (index == 1) + mode = QCompleter::PopupCompletion; + else + mode = QCompleter::UnfilteredPopupCompletion; + + completer->setCompletionMode(mode); +} +//! [5] + +QAbstractItemModel *MainWindow::modelFromFile(const QString& fileName) +{ + QFile file(fileName); + if (!file.open(QFile::ReadOnly)) + return new QStringListModel(completer); + +#ifndef QT_NO_CURSOR + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); +#endif + QStringList words; + + QStandardItemModel *model = new QStandardItemModel(completer); + QVector parents(10); + parents[0] = model->invisibleRootItem(); + + while (!file.atEnd()) { + QString line = file.readLine(); + QString trimmedLine = line.trimmed(); + if (line.isEmpty() || trimmedLine.isEmpty()) + continue; + + QRegExp re("^\\s+"); + int nonws = re.indexIn(line); + int level = 0; + if (nonws == -1) { + level = 0; + } else { + if (line.startsWith("\t")) { + level = re.cap(0).length(); + } else { + level = re.cap(0).length()/4; + } + } + + if (level+1 >= parents.size()) + parents.resize(parents.size()*2); + + QStandardItem *item = new QStandardItem; + item->setText(trimmedLine); + parents[level]->appendRow(item); + parents[level+1] = item; + } + +#ifndef QT_NO_CURSOR + QApplication::restoreOverrideCursor(); +#endif + + return model; +} + +void MainWindow::highlight(const QModelIndex &index) +{ + QAbstractItemModel *completionModel = completer->completionModel(); + QAbstractProxyModel *proxy = qobject_cast(completionModel); + if (!proxy) + return; + QModelIndex sourceIndex = proxy->mapToSource(index); + treeView->selectionModel()->select(sourceIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); + treeView->scrollTo(index); +} + +//! [6] +void MainWindow::about() +{ + QMessageBox::about(this, tr("About"), tr("This example demonstrates how " + "to use a QCompleter with a custom tree model.")); +} +//! [6] + +//! [7] +void MainWindow::changeCase(int cs) +{ + completer->setCaseSensitivity(cs ? Qt::CaseSensitive : Qt::CaseInsensitive); +} +//! [7] + +void MainWindow::updateContentsLabel(const QString& sep) +{ + contentsLabel->setText(tr("Type path from model above with items at each level separated by a '%1'").arg(sep)); +} + diff --git a/examples/widgets/tools/treemodelcompleter/mainwindow.h b/examples/widgets/tools/treemodelcompleter/mainwindow.h new file mode 100644 index 0000000000..206a41c2fc --- /dev/null +++ b/examples/widgets/tools/treemodelcompleter/mainwindow.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include + +class TreeModelCompleter; +QT_BEGIN_NAMESPACE +class QAbstractItemModel; +class QComboBox; +class QLabel; +class QLineEdit; +class QProgressBar; +class QCheckBox; +class QTreeView; +QT_END_NAMESPACE + +//! [0] +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = 0); + +private slots: + void about(); + void changeCase(int); + void changeMode(int); + void highlight(const QModelIndex&); + void updateContentsLabel(const QString&); +//! [0] + +//! [1] +private: + void createMenu(); + QAbstractItemModel *modelFromFile(const QString& fileName); + + QTreeView *treeView; + QComboBox *caseCombo; + QComboBox *modeCombo; + QLabel *contentsLabel; + TreeModelCompleter *completer; + QLineEdit *lineEdit; +}; +//! [1] + +#endif // MAINWINDOW_H diff --git a/examples/widgets/tools/treemodelcompleter/resources/treemodel.txt b/examples/widgets/tools/treemodelcompleter/resources/treemodel.txt new file mode 100644 index 0000000000..06c90077af --- /dev/null +++ b/examples/widgets/tools/treemodelcompleter/resources/treemodel.txt @@ -0,0 +1,20 @@ +Parent1 + Child1 + GrandChild1 + GrandChild2 + GrandChild3 + GrandGrandChild1 + Child2 + GrandChild1 + GrandGrandChild1 + GrandChild2 + Child3 + +Parent2 + Child1 + GrandChild1 + Child2 + Child3 + GrandChild1 + GrandChild2 + diff --git a/examples/widgets/tools/treemodelcompleter/treemodelcompleter.cpp b/examples/widgets/tools/treemodelcompleter/treemodelcompleter.cpp new file mode 100644 index 0000000000..71adaac077 --- /dev/null +++ b/examples/widgets/tools/treemodelcompleter/treemodelcompleter.cpp @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "treemodelcompleter.h" +#include + +//! [0] +TreeModelCompleter::TreeModelCompleter(QObject *parent) + : QCompleter(parent) +{ +} +//! [0] + +//! [1] +TreeModelCompleter::TreeModelCompleter(QAbstractItemModel *model, QObject *parent) + : QCompleter(model, parent) +{ +} +//! [1] + +void TreeModelCompleter::setSeparator(const QString &separator) +{ + sep = separator; +} + +//! [2] +QString TreeModelCompleter::separator() const +{ + return sep; +} +//! [2] + +//! [3] +QStringList TreeModelCompleter::splitPath(const QString &path) const +{ + if (sep.isNull()) { + return QCompleter::splitPath(path); + } + + return path.split(sep); +} +//! [3] + +//! [4] +QString TreeModelCompleter::pathFromIndex(const QModelIndex &index) const +{ + if (sep.isNull()) { + return QCompleter::pathFromIndex(index); + } + + // navigate up and accumulate data + QStringList dataList; + for (QModelIndex i = index; i.isValid(); i = i.parent()) { + dataList.prepend(model()->data(i, completionRole()).toString()); + } + + return dataList.join(sep); +} +//! [4] + diff --git a/examples/widgets/tools/treemodelcompleter/treemodelcompleter.desktop b/examples/widgets/tools/treemodelcompleter/treemodelcompleter.desktop new file mode 100644 index 0000000000..a54aa7b66e --- /dev/null +++ b/examples/widgets/tools/treemodelcompleter/treemodelcompleter.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=Tree Model Completer +Exec=/opt/usr/bin/treemodelcompleter +Icon=treemodelcompleter +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/examples/widgets/tools/treemodelcompleter/treemodelcompleter.h b/examples/widgets/tools/treemodelcompleter/treemodelcompleter.h new file mode 100644 index 0000000000..f0288805d3 --- /dev/null +++ b/examples/widgets/tools/treemodelcompleter/treemodelcompleter.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TREEMODELCOMPLETER_H +#define TREEMODELCOMPLETER_H + +#include + +//! [0] +class TreeModelCompleter : public QCompleter +{ + Q_OBJECT + Q_PROPERTY(QString separator READ separator WRITE setSeparator) + +public: + explicit TreeModelCompleter(QObject *parent = 0); + explicit TreeModelCompleter(QAbstractItemModel *model, QObject *parent = 0); + + QString separator() const; +public slots: + void setSeparator(const QString &separator); + +protected: + QStringList splitPath(const QString &path) const; + QString pathFromIndex(const QModelIndex &index) const; + +private: + QString sep; +}; +//! [0] + +#endif // TREEMODELCOMPLETER_H + diff --git a/examples/widgets/tools/treemodelcompleter/treemodelcompleter.pro b/examples/widgets/tools/treemodelcompleter/treemodelcompleter.pro new file mode 100644 index 0000000000..ffdf9b647d --- /dev/null +++ b/examples/widgets/tools/treemodelcompleter/treemodelcompleter.pro @@ -0,0 +1,16 @@ +HEADERS = treemodelcompleter.h \ + mainwindow.h +SOURCES = treemodelcompleter.cpp \ + main.cpp \ + mainwindow.cpp +RESOURCES = treemodelcompleter.qrc + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/tools/treemodelcompleter +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS treemodelcompleter.pro resources +sources.path = $$[QT_INSTALL_EXAMPLES]/tools/treemodelcompleter +INSTALLS += target sources + +QT += widgets + +simulator: warning(This example might not fully work on Simulator platform) diff --git a/examples/widgets/tools/treemodelcompleter/treemodelcompleter.qrc b/examples/widgets/tools/treemodelcompleter/treemodelcompleter.qrc new file mode 100644 index 0000000000..1130fcd641 --- /dev/null +++ b/examples/widgets/tools/treemodelcompleter/treemodelcompleter.qrc @@ -0,0 +1,5 @@ + + + resources/treemodel.txt + + -- cgit v1.2.3