be15856f61
Change copyrights and license headers from Nokia to Digia Change-Id: If1cc974286d29fd01ec6c19dd4719a67f4c3f00e Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
172 lines
7.0 KiB
Plaintext
172 lines
7.0 KiB
Plaintext
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
|
|
** Contact: http://www.qt-project.org/legal
|
|
**
|
|
** This file is part of the documentation of the Qt Toolkit.
|
|
**
|
|
** $QT_BEGIN_LICENSE:FDL$
|
|
** Commercial License Usage
|
|
** Licensees holding valid commercial Qt licenses may use this file in
|
|
** accordance with the commercial license agreement provided with the
|
|
** Software or, alternatively, in accordance with the terms contained in
|
|
** a written agreement between you and Digia. For licensing terms and
|
|
** conditions see http://qt.digia.com/licensing. For further information
|
|
** use the contact form at http://qt.digia.com/contact-us.
|
|
**
|
|
** GNU Free Documentation License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU Free
|
|
** Documentation License version 1.3 as published by the Free Software
|
|
** Foundation and appearing in the file included in the packaging of
|
|
** this file. Please review the following information to ensure
|
|
** the GNU Free Documentation License version 1.3 requirements
|
|
** will be met: http://www.gnu.org/copyleft/fdl.html.
|
|
** $QT_END_LICENSE$
|
|
**
|
|
****************************************************************************/
|
|
|
|
/*!
|
|
\example treemodelcompleter
|
|
\title Tree Model Completer Example
|
|
|
|
The Tree Model Completer example shows how to provide completion
|
|
facilities for a hierarchical model, using a period as the separator
|
|
to access Child, GrandChild and GrandGrandChild level objects.
|
|
|
|
\image treemodelcompleter-example.png
|
|
|
|
Similar to the \l{Completer Example}, we provide QComboBox objects to
|
|
enable selection for completion mode and case sensitivity, as well as
|
|
a QCheckBox for wrap completions.
|
|
|
|
\section1 The Resource File
|
|
|
|
The contents of the TreeModelCompleter is read from \e treemodel.txt.
|
|
This file is embedded within the \e treemodelcompleter.qrc resource file,
|
|
which contains the following:
|
|
|
|
\quotefile treemodelcompleter/treemodelcompleter.qrc
|
|
|
|
\section1 TreeModelCompleter Class Definition
|
|
|
|
The \c TreeModelCompleter is a subclass of QCompleter with two
|
|
constructors - one with \a parent as an argument and another with
|
|
\a parent and \a model as arguments.
|
|
|
|
\snippet treemodelcompleter/treemodelcompleter.h 0
|
|
|
|
The class reimplements the protected functions
|
|
\l{QCompleter::splitPath()}{splitPath()} and
|
|
\l{QCompleter::pathFromIndex()}{pathFromIndex()} to suit a tree model.
|
|
For more information on customizing QCompleter to suit tree models, refer
|
|
to \l{QCompleter#Handling Tree Models}{Handling Tree Models}.
|
|
|
|
\c TreeModelCompleter also has a separator property which is declared
|
|
using the Q_PROPERTY() macro. The separator has READ and WRITE attributes
|
|
and the corresponding functions \c separator() and \c setSeparator(). For
|
|
more information on Q_PROPERTY(), refer to \l{Qt's Property System}.
|
|
|
|
\section1 TreeModelCompleter Class Implementation
|
|
|
|
The first constructor constructs a \c TreeModelCompleter object with a
|
|
parent while the second constructor constructs an object with a parent
|
|
and a QAbstractItemModel, \a model.
|
|
|
|
\snippet treemodelcompleter/treemodelcompleter.cpp 0
|
|
\codeline
|
|
\snippet treemodelcompleter/treemodelcompleter.cpp 1
|
|
|
|
The \c separator() function is a getter function that returns the
|
|
separator string.
|
|
|
|
\snippet treemodelcompleter/treemodelcompleter.cpp 2
|
|
|
|
As mentioned earlier, the \c splitPath() function is reimplemented because
|
|
the default implementation is more suited to QDirModel or list models. In
|
|
order for QCompleter to split the path into a list of strings that are
|
|
matched at each level, we split it using QString::split() with \c sep as its
|
|
separator.
|
|
|
|
\snippet treemodelcompleter/treemodelcompleter.cpp 3
|
|
|
|
The \c pathFromIndex() function returns data for the completionRole() for a
|
|
tree model. This function is reimplemented as its default implementation is
|
|
more suitable for list models. If there is no separator, we use
|
|
\l{QCompleter}'s default implementation, otherwise we use the
|
|
\l{QStringList::prepend()}{prepend()} function to navigate upwards and
|
|
accumulate the data. The function then returns a QStringList, \c dataList,
|
|
using a separator to join objects of different levels.
|
|
|
|
\snippet treemodelcompleter/treemodelcompleter.cpp 4
|
|
|
|
\section1 MainWindow Class Definition
|
|
|
|
The \c MainWindow class is a subclass of QMainWindow and implements five
|
|
custom slots: \c about(), \c changeCase(), \c changeMode(),
|
|
\c highlight(), and \c updateContentsLabel().
|
|
|
|
\snippet treemodelcompleter/mainwindow.h 0
|
|
|
|
In addition, the class has two private functions, \c createMenu() and
|
|
\c modelFromFile(), as well as private instances of QTreeView, QComboBox,
|
|
QLabel, \c TreeModelCompleter and QLineEdit.
|
|
|
|
\snippet treemodelcompleter/mainwindow.h 1
|
|
|
|
\section1 MainWindow Class Implementation
|
|
|
|
The \c{MainWindow}'s constructor creates a \c MainWindow object with a
|
|
parent and initializes the \c completer and \c lineEdit. The
|
|
\c createMenu() function is invoked to set up the "File" menu and "Help"
|
|
menu. The \c{completer}'s model is set to the QAbstractItemModel obtained
|
|
from \c modelFromFile(), and the \l{QCompleter::highlighted()}
|
|
{highlighted()} signal is connected to \c{MainWindow}'s \c highlight()
|
|
slot.
|
|
|
|
\snippet treemodelcompleter/mainwindow.cpp 0
|
|
|
|
The QLabel objects \c modelLabel, \c modeLabel and \c caseLabel are
|
|
instantiated. Also, the QComboBox objects, \c modeCombo and \c caseCombo,
|
|
are instantiated and populated. By default, the \c{completer}'s mode is
|
|
"Filtered Popup" and the case is insensitive.
|
|
|
|
\snippet treemodelcompleter/mainwindow.cpp 1
|
|
\codeline
|
|
\snippet treemodelcompleter/mainwindow.cpp 2
|
|
|
|
We use a QGridLayout to place all the objects in the \c MainWindow.
|
|
|
|
\snippet treemodelcompleter/mainwindow.cpp 3
|
|
|
|
The \c createMenu() function sets up the QAction objects required and
|
|
adds them to the "File" menu and "Help" menu. The
|
|
\l{QAction::triggered()}{triggered()} signals from these actions are
|
|
connected to their respective slots.
|
|
|
|
\snippet treemodelcompleter/mainwindow.cpp 4
|
|
|
|
The \c changeMode() function accepts an \a index corresponding to the
|
|
user's choice of completion mode and changes the \c{completer}'s mode
|
|
accordingly.
|
|
|
|
\snippet treemodelcompleter/mainwindow.cpp 5
|
|
|
|
The \c about() function provides a brief description on the Tree Model
|
|
Completer example.
|
|
|
|
\snippet treemodelcompleter/mainwindow.cpp 6
|
|
|
|
The \c changeCase() function alternates between \l{Qt::CaseSensitive}
|
|
{Case Sensitive} and \l{Qt::CaseInsensitive}{Case Insensitive} modes,
|
|
depending on the value of \a cs.
|
|
|
|
\snippet treemodelcompleter/mainwindow.cpp 7
|
|
|
|
\section1 \c main() Function
|
|
|
|
The \c main() function instantiates \c MainWindow and invokes the
|
|
\l{QWidget::show()}{show()} function to display it.
|
|
|
|
\snippet treemodelcompleter/main.cpp 0
|
|
*/
|