summaryrefslogtreecommitdiffstats
path: root/examples/widgets/itemviews/basicsortfiltermodel/window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/widgets/itemviews/basicsortfiltermodel/window.cpp')
-rw-r--r--examples/widgets/itemviews/basicsortfiltermodel/window.cpp120
1 files changed, 53 insertions, 67 deletions
diff --git a/examples/widgets/itemviews/basicsortfiltermodel/window.cpp b/examples/widgets/itemviews/basicsortfiltermodel/window.cpp
index b45ee47ee2..3e2e3fbefa 100644
--- a/examples/widgets/itemviews/basicsortfiltermodel/window.cpp
+++ b/examples/widgets/itemviews/basicsortfiltermodel/window.cpp
@@ -1,57 +1,24 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** 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 The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, 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 The Qt Company Ltd 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$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtWidgets>
#include "window.h"
+static inline QColor textColor(const QPalette &palette)
+{
+ return palette.color(QPalette::Active, QPalette::Text);
+}
+
+static void setTextColor(QWidget *w, const QColor &c)
+{
+ auto palette = w->palette();
+ if (textColor(palette) != c) {
+ palette.setColor(QPalette::Active, QPalette::Text, c);
+ w->setPalette(palette);
+ }
+}
+
Window::Window()
{
proxyModel = new QSortFilterProxyModel;
@@ -70,13 +37,14 @@ Window::Window()
filterCaseSensitivityCheckBox = new QCheckBox(tr("Case sensitive filter"));
filterPatternLineEdit = new QLineEdit;
+ filterPatternLineEdit->setClearButtonEnabled(true);
filterPatternLabel = new QLabel(tr("&Filter pattern:"));
filterPatternLabel->setBuddy(filterPatternLineEdit);
filterSyntaxComboBox = new QComboBox;
- filterSyntaxComboBox->addItem(tr("Regular expression"), QRegExp::RegExp);
- filterSyntaxComboBox->addItem(tr("Wildcard"), QRegExp::Wildcard);
- filterSyntaxComboBox->addItem(tr("Fixed string"), QRegExp::FixedString);
+ filterSyntaxComboBox->addItem(tr("Regular expression"), RegularExpression);
+ filterSyntaxComboBox->addItem(tr("Wildcard"), Wildcard);
+ filterSyntaxComboBox->addItem(tr("Fixed string"), FixedString);
filterSyntaxLabel = new QLabel(tr("Filter &syntax:"));
filterSyntaxLabel->setBuddy(filterSyntaxComboBox);
@@ -88,13 +56,13 @@ Window::Window()
filterColumnLabel->setBuddy(filterColumnComboBox);
connect(filterPatternLineEdit, &QLineEdit::textChanged,
- this, &Window::filterRegExpChanged);
- connect(filterSyntaxComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
- this, &Window::filterRegExpChanged);
- connect(filterColumnComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
+ this, &Window::filterRegularExpressionChanged);
+ connect(filterSyntaxComboBox, &QComboBox::currentIndexChanged,
+ this, &Window::filterRegularExpressionChanged);
+ connect(filterColumnComboBox, &QComboBox::currentIndexChanged,
this, &Window::filterColumnChanged);
connect(filterCaseSensitivityCheckBox, &QAbstractButton::toggled,
- this, &Window::filterRegExpChanged);
+ this, &Window::filterRegularExpressionChanged);
connect(sortCaseSensitivityCheckBox, &QAbstractButton::toggled,
this, &Window::sortChanged);
@@ -141,17 +109,35 @@ void Window::setSourceModel(QAbstractItemModel *model)
sourceView->setModel(model);
}
-void Window::filterRegExpChanged()
+void Window::filterRegularExpressionChanged()
{
- QRegExp::PatternSyntax syntax =
- QRegExp::PatternSyntax(filterSyntaxComboBox->itemData(
- filterSyntaxComboBox->currentIndex()).toInt());
- Qt::CaseSensitivity caseSensitivity =
- filterCaseSensitivityCheckBox->isChecked() ? Qt::CaseSensitive
- : Qt::CaseInsensitive;
-
- QRegExp regExp(filterPatternLineEdit->text(), caseSensitivity, syntax);
- proxyModel->setFilterRegExp(regExp);
+ Syntax s = Syntax(filterSyntaxComboBox->itemData(filterSyntaxComboBox->currentIndex()).toInt());
+ QString pattern = filterPatternLineEdit->text();
+ switch (s) {
+ case Wildcard:
+ pattern = QRegularExpression::wildcardToRegularExpression(pattern);
+ break;
+ case FixedString:
+ pattern = QRegularExpression::escape(pattern);
+ break;
+ default:
+ break;
+ }
+
+ QRegularExpression::PatternOptions options = QRegularExpression::NoPatternOption;
+ if (!filterCaseSensitivityCheckBox->isChecked())
+ options |= QRegularExpression::CaseInsensitiveOption;
+ QRegularExpression regularExpression(pattern, options);
+
+ if (regularExpression.isValid()) {
+ filterPatternLineEdit->setToolTip(QString());
+ proxyModel->setFilterRegularExpression(regularExpression);
+ setTextColor(filterPatternLineEdit, textColor(style()->standardPalette()));
+ } else {
+ filterPatternLineEdit->setToolTip(regularExpression.errorString());
+ proxyModel->setFilterRegularExpression(QRegularExpression());
+ setTextColor(filterPatternLineEdit, Qt::red);
+ }
}
void Window::filterColumnChanged()