diff options
Diffstat (limited to 'examples/widgets')
18 files changed, 582 insertions, 13 deletions
diff --git a/examples/widgets/doc/images/regularexpression-example.png b/examples/widgets/doc/images/regularexpression-example.png Binary files differnew file mode 100644 index 0000000000..d426d8514a --- /dev/null +++ b/examples/widgets/doc/images/regularexpression-example.png diff --git a/examples/widgets/doc/src/regularexpression.qdoc b/examples/widgets/doc/src/regularexpression.qdoc new file mode 100644 index 0000000000..804867fb58 --- /dev/null +++ b/examples/widgets/doc/src/regularexpression.qdoc @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** 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 The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/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 tools/regularexpression + \title QRegularExpression Example + \ingroup examples-widgets-tools + + \brief The QRegularExpression example shows how regular expressions in Qt are + applied to text by providing an environment in which new regular expressions can be + created and tested on custom text strings. + + The example makes usage of the QRegularExpression class, which has been + introduced in Qt 5.0. QRegularExpression implements Perl-compatible regular + expressions, supporting a number of advanced matching features, such as + case insensitive matching, multiline matching, Unicode properties selectors + and partial/incremental matching. + + QRegularExpression is a big improvement over QRegExp in terms of features + and performance and should be used in all new code. + + \image regularexpression-example.png +*/ + diff --git a/examples/widgets/draganddrop/puzzle/puzzle.pro b/examples/widgets/draganddrop/puzzle/puzzle.pro index 67fff21a26..404b75187d 100644 --- a/examples/widgets/draganddrop/puzzle/puzzle.pro +++ b/examples/widgets/draganddrop/puzzle/puzzle.pro @@ -18,5 +18,5 @@ INSTALLS += target wince { addFile.files = example.jpg addFile.path = . - DEPLOYMENT += addFile + INSTALLS += addFile } diff --git a/examples/widgets/mainwindows/mainwindow/colorswatch.cpp b/examples/widgets/mainwindows/mainwindow/colorswatch.cpp index 408f6c4b0f..7499389dc3 100644 --- a/examples/widgets/mainwindows/mainwindow/colorswatch.cpp +++ b/examples/widgets/mainwindows/mainwindow/colorswatch.cpp @@ -248,8 +248,8 @@ void ColorDock::setCustomSizeHint(const QSize &size) updateGeometry(); } -ColorSwatch::ColorSwatch(const QString &colorName, QWidget *parent, Qt::WindowFlags flags) - : QDockWidget(parent, flags) +ColorSwatch::ColorSwatch(const QString &colorName, QMainWindow *parent, Qt::WindowFlags flags) + : QDockWidget(parent, flags), mainWindow(parent) { setObjectName(colorName + QLatin1String(" Dock Widget")); setWindowTitle(objectName() + QLatin1String(" [*]")); @@ -390,7 +390,6 @@ ColorSwatch::ColorSwatch(const QString &colorName, QWidget *parent, Qt::WindowFl void ColorSwatch::updateContextMenu() { - QMainWindow *mainWindow = qobject_cast<QMainWindow *>(parentWidget()); const Qt::DockWidgetArea area = mainWindow->dockWidgetArea(this); const Qt::DockWidgetAreas areas = allowedAreas(); @@ -458,7 +457,6 @@ void ColorSwatch::updateContextMenu() void ColorSwatch::splitInto(QAction *action) { - QMainWindow *mainWindow = qobject_cast<QMainWindow *>(parentWidget()); QList<ColorSwatch*> dock_list = mainWindow->findChildren<ColorSwatch*>(); ColorSwatch *target = 0; foreach (ColorSwatch *dock, dock_list) { @@ -477,7 +475,6 @@ void ColorSwatch::splitInto(QAction *action) void ColorSwatch::tabInto(QAction *action) { - QMainWindow *mainWindow = qobject_cast<QMainWindow *>(parentWidget()); QList<ColorSwatch*> dock_list = mainWindow->findChildren<ColorSwatch*>(); ColorSwatch *target = 0; foreach (ColorSwatch *dock, dock_list) { @@ -525,7 +522,6 @@ void ColorSwatch::place(Qt::DockWidgetArea area, bool p) { if (!p) return; - QMainWindow *mainWindow = qobject_cast<QMainWindow *>(parentWidget()); mainWindow->addDockWidget(area, this); if (allowedAreasActions->isEnabled()) { diff --git a/examples/widgets/mainwindows/mainwindow/colorswatch.h b/examples/widgets/mainwindows/mainwindow/colorswatch.h index 6d02592b22..78f267c320 100644 --- a/examples/widgets/mainwindows/mainwindow/colorswatch.h +++ b/examples/widgets/mainwindows/mainwindow/colorswatch.h @@ -70,8 +70,10 @@ class ColorSwatch : public QDockWidget QAction *windowModifiedAction; + QMainWindow *mainWindow; + public: - explicit ColorSwatch(const QString &colorName, QWidget *parent = 0, Qt::WindowFlags flags = 0); + explicit ColorSwatch(const QString &colorName, QMainWindow *parent = 0, Qt::WindowFlags flags = 0); QMenu *menu; void setCustomSizeHint(const QSize &size); diff --git a/examples/widgets/mainwindows/mainwindow/mainwindow.cpp b/examples/widgets/mainwindows/mainwindow/mainwindow.cpp index 6349f7aa2e..ee70fed405 100644 --- a/examples/widgets/mainwindows/mainwindow/mainwindow.cpp +++ b/examples/widgets/mainwindows/mainwindow/mainwindow.cpp @@ -156,6 +156,11 @@ void MainWindow::setupMenuBar() action->setChecked(dockOptions() & VerticalTabs); connect(action, SIGNAL(toggled(bool)), this, SLOT(setDockOptions())); + action = mainWindowMenu->addAction(tr("Grouped dragging")); + action->setCheckable(true); + action->setChecked(dockOptions() & GroupedDragging); + connect(action, SIGNAL(toggled(bool)), this, SLOT(setDockOptions())); + QMenu *toolBarMenu = menuBar()->addMenu(tr("Tool bars")); for (int i = 0; i < toolBars.count(); ++i) toolBarMenu->addMenu(toolBars.at(i)->menu); @@ -187,6 +192,8 @@ void MainWindow::setDockOptions() opts |= ForceTabbedDocks; if (actions.at(4)->isChecked()) opts |= VerticalTabs; + if (actions.at(5)->isChecked()) + opts |= GroupedDragging; QMainWindow::setDockOptions(opts); } diff --git a/examples/widgets/painting/fontsampler/mainwindow.cpp b/examples/widgets/painting/fontsampler/mainwindow.cpp index bff8ae9c22..53a2aac82e 100644 --- a/examples/widgets/painting/fontsampler/mainwindow.cpp +++ b/examples/widgets/painting/fontsampler/mainwindow.cpp @@ -80,7 +80,7 @@ void MainWindow::setupFontTree() QTreeWidgetItem *familyItem = new QTreeWidgetItem(fontTree); familyItem->setText(0, family); familyItem->setCheckState(0, Qt::Unchecked); - familyItem->setFlags(familyItem->flags() | Qt::ItemIsTristate); + familyItem->setFlags(familyItem->flags() | Qt::ItemIsAutoTristate); foreach (QString style, styles) { QTreeWidgetItem *styleItem = new QTreeWidgetItem(familyItem); diff --git a/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter.pro b/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter.pro index 19f471b5cf..93cd950b0b 100644 --- a/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter.pro +++ b/examples/widgets/richtext/syntaxhighlighter/syntaxhighlighter.pro @@ -14,5 +14,5 @@ INSTALLS += target wince { addFiles.files = main.cpp mainwindow.cpp addFiles.path = . - DEPLOYMENT += addFiles + INSTALLS += addFiles } diff --git a/examples/widgets/tools/regularexpression/images/copy.png b/examples/widgets/tools/regularexpression/images/copy.png Binary files differnew file mode 100644 index 0000000000..2aeb28288f --- /dev/null +++ b/examples/widgets/tools/regularexpression/images/copy.png diff --git a/examples/widgets/tools/regularexpression/main.cpp b/examples/widgets/tools/regularexpression/main.cpp new file mode 100644 index 0000000000..a5ef410688 --- /dev/null +++ b/examples/widgets/tools/regularexpression/main.cpp @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** 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 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$ +** +****************************************************************************/ + +#include "regularexpressiondialog.h" + +#include <QApplication> + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + RegularExpressionDialog dialog; + dialog.show(); + return app.exec(); +} diff --git a/examples/widgets/tools/regularexpression/regularexpression.pro b/examples/widgets/tools/regularexpression/regularexpression.pro new file mode 100644 index 0000000000..8e72e171b8 --- /dev/null +++ b/examples/widgets/tools/regularexpression/regularexpression.pro @@ -0,0 +1,11 @@ +QT += widgets + +HEADERS = regularexpressiondialog.h +SOURCES = regularexpressiondialog.cpp \ + main.cpp + +RESOURCES += regularexpression.qrc + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/regularexpression +INSTALLS += target diff --git a/examples/widgets/tools/regularexpression/regularexpression.qrc b/examples/widgets/tools/regularexpression/regularexpression.qrc new file mode 100644 index 0000000000..ce7e104af3 --- /dev/null +++ b/examples/widgets/tools/regularexpression/regularexpression.qrc @@ -0,0 +1,5 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file>images/copy.png</file> +</qresource> +</RCC> diff --git a/examples/widgets/tools/regularexpression/regularexpressiondialog.cpp b/examples/widgets/tools/regularexpression/regularexpressiondialog.cpp new file mode 100644 index 0000000000..d40b4b325d --- /dev/null +++ b/examples/widgets/tools/regularexpression/regularexpressiondialog.cpp @@ -0,0 +1,349 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> +** Copyright (C) 2015 Samuel Gaist <samuel.gaist@edeltech.ch> +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** 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 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$ +** +****************************************************************************/ + +#include "regularexpressiondialog.h" + +#include <QApplication> + +#include <QCheckBox> +#include <QComboBox> +#include <QLabel> +#include <QLineEdit> +#include <QSpinBox> +#include <QPlainTextEdit> +#include <QTreeWidget> + +#include <QAction> +#include <QClipboard> + +#include <QHBoxLayout> +#include <QGridLayout> +#include <QFormLayout> + +#include <QRegularExpression> +#include <QRegularExpressionMatch> +#include <QRegularExpressionMatchIterator> + +Q_DECLARE_METATYPE(QRegularExpression::MatchType) + +RegularExpressionDialog::RegularExpressionDialog(QWidget *parent) + : QDialog(parent) +{ + setupUi(); + setWindowTitle(tr("QRegularExpression Example")); + + connect(patternLineEdit, &QLineEdit::textChanged, this, &RegularExpressionDialog::refresh); + connect(subjectTextEdit, &QPlainTextEdit::textChanged, this, &RegularExpressionDialog::refresh); + + connect(caseInsensitiveOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh); + connect(dotMatchesEverythingOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh); + connect(multilineOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh); + connect(extendedPatternSyntaxOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh); + connect(invertedGreedinessOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh); + connect(dontCaptureOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh); + connect(useUnicodePropertiesOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh); + connect(optimizeOnFirstUsageOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh); + connect(dontAutomaticallyOptimizeOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh); + + connect(offsetSpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), + this, &RegularExpressionDialog::refresh); + + connect(matchTypeComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), + this, &RegularExpressionDialog::refresh); + + connect(anchoredMatchOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh); + connect(dontCheckSubjectStringMatchOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh); + + patternLineEdit->setText(tr("(\\+?\\d+)-(?<prefix>\\d+)-(?<number>\\w+)")); + subjectTextEdit->setPlainText(tr("My office number is +43-152-0123456, my mobile is 001-41-255512 instead.")); + + refresh(); +} + +void RegularExpressionDialog::refresh() +{ + setUpdatesEnabled(false); + + const QString pattern = patternLineEdit->text(); + const QString text = subjectTextEdit->toPlainText(); + + offsetSpinBox->setMaximum(qMax(0, text.length() - 1)); + + QString escaped = pattern; + escaped.replace(QLatin1String("\\"), QLatin1String("\\\\")); + escaped.replace(QLatin1String("\""), QLatin1String("\\\"")); + escaped.prepend(QLatin1String("\"")); + escaped.append(QLatin1String("\"")); + escapedPatternLineEdit->setText(escaped); + + QRegularExpression rx(pattern); + QRegularExpression::MatchType matchType = matchTypeComboBox->currentData().value<QRegularExpression::MatchType>(); + QRegularExpression::PatternOptions patternOptions = QRegularExpression::NoPatternOption; + QRegularExpression::MatchOptions matchOptions = QRegularExpression::NoMatchOption; + + if (anchoredMatchOptionCheckBox->isChecked()) + matchOptions |= QRegularExpression::AnchoredMatchOption; + if (dontCheckSubjectStringMatchOptionCheckBox->isChecked()) + matchOptions |= QRegularExpression::DontCheckSubjectStringMatchOption; + + if (caseInsensitiveOptionCheckBox->isChecked()) + patternOptions |= QRegularExpression::CaseInsensitiveOption; + if (dotMatchesEverythingOptionCheckBox->isChecked()) + patternOptions |= QRegularExpression::DotMatchesEverythingOption; + if (multilineOptionCheckBox->isChecked()) + patternOptions |= QRegularExpression::MultilineOption; + if (extendedPatternSyntaxOptionCheckBox->isChecked()) + patternOptions |= QRegularExpression::ExtendedPatternSyntaxOption; + if (invertedGreedinessOptionCheckBox->isChecked()) + patternOptions |= QRegularExpression::InvertedGreedinessOption; + if (dontCaptureOptionCheckBox->isChecked()) + patternOptions |= QRegularExpression::DontCaptureOption; + if (useUnicodePropertiesOptionCheckBox->isChecked()) + patternOptions |= QRegularExpression::UseUnicodePropertiesOption; + if (optimizeOnFirstUsageOptionCheckBox->isChecked()) + patternOptions |= QRegularExpression::OptimizeOnFirstUsageOption; + if (dontAutomaticallyOptimizeOptionCheckBox->isChecked()) + patternOptions |= QRegularExpression::DontAutomaticallyOptimizeOption; + + rx.setPatternOptions(patternOptions); + + QPalette palette = patternLineEdit->palette(); + if (rx.isValid()) + palette.setColor(QPalette::Text, subjectTextEdit->palette().color(QPalette::Text)); + else + palette.setColor(QPalette::Text, Qt::red); + patternLineEdit->setPalette(palette); + + matchDetailsTreeWidget->clear(); + matchDetailsTreeWidget->setEnabled(rx.isValid()); + + if (rx.isValid()) { + const int capturingGroupsCount = rx.captureCount() + 1; + + QRegularExpressionMatchIterator iterator = rx.globalMatch(text, offsetSpinBox->value(), matchType, matchOptions); + int i = 0; + + while (iterator.hasNext()) { + QRegularExpressionMatch match = iterator.next(); + + QTreeWidgetItem *matchDetailTopItem = new QTreeWidgetItem(matchDetailsTreeWidget); + matchDetailTopItem->setText(0, QString::number(i)); + + for (int captureGroupIndex = 0; captureGroupIndex < capturingGroupsCount; ++captureGroupIndex) { + QTreeWidgetItem *matchDetailItem = new QTreeWidgetItem(matchDetailTopItem); + matchDetailItem->setText(1, QString::number(captureGroupIndex)); + matchDetailItem->setText(2, match.captured(captureGroupIndex)); + } + + ++i; + } + } + + matchDetailsTreeWidget->expandAll(); + + namedGroupsTreeWidget->clear(); + namedGroupsTreeWidget->setEnabled(rx.isValid()); + + if (rx.isValid()) { + regexpStatusLabel->setText(tr("Valid")); + + const QStringList namedCaptureGroups = rx.namedCaptureGroups(); + for (int i = 0; i < namedCaptureGroups.size(); ++i) { + const QString currentNamedCaptureGroup = namedCaptureGroups.at(i); + + QTreeWidgetItem *namedGroupItem = new QTreeWidgetItem(namedGroupsTreeWidget); + namedGroupItem->setText(0, QString::number(i)); + namedGroupItem->setText(1, currentNamedCaptureGroup.isNull() ? tr("<no name>") : currentNamedCaptureGroup); + } + } else { + regexpStatusLabel->setText(tr("Invalid: syntax error at position %1 (%2)") + .arg(rx.patternErrorOffset()) + .arg(rx.errorString())); + } + + setUpdatesEnabled(true); +} + +void RegularExpressionDialog::copyEscapedPatternToClipboard() +{ +#ifndef QT_NO_CLIPBOARD + QClipboard *clipboard = QGuiApplication::clipboard(); + if (clipboard) + clipboard->setText(escapedPatternLineEdit->text()); +#endif +} + +void RegularExpressionDialog::setupUi() +{ + QWidget *leftHalfContainer = setupLeftUi(); + + QFrame *verticalSeparator = new QFrame; + verticalSeparator->setFrameStyle(QFrame::VLine | QFrame::Sunken); + + QWidget *rightHalfContainer = setupRightUi(); + + QHBoxLayout *mainLayout = new QHBoxLayout; + mainLayout->addWidget(leftHalfContainer); + mainLayout->addWidget(verticalSeparator); + mainLayout->addWidget(rightHalfContainer); + + setLayout(mainLayout); +} + +QWidget *RegularExpressionDialog::setupLeftUi() +{ + QWidget *container = new QWidget; + + QFormLayout *layout = new QFormLayout(container); + layout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow); + layout->setMargin(0); + + QLabel *regexpAndSubjectLabel = new QLabel(tr("<h3>Regular expression and text input</h3>")); + layout->addRow(regexpAndSubjectLabel); + + patternLineEdit = new QLineEdit; + patternLineEdit->setClearButtonEnabled(true); + layout->addRow(tr("&Pattern:"), patternLineEdit); + + escapedPatternLineEdit = new QLineEdit; + escapedPatternLineEdit->setReadOnly(true); + QPalette palette = escapedPatternLineEdit->palette(); + palette.setBrush(QPalette::Base, palette.brush(QPalette::Disabled, QPalette::Base)); + escapedPatternLineEdit->setPalette(palette); + +#ifndef QT_NO_CLIPBOARD + QAction *copyEscapedPatternAction = new QAction(this); + copyEscapedPatternAction->setText(tr("Copy to clipboard")); + copyEscapedPatternAction->setIcon(QIcon(QStringLiteral(":/images/copy.png"))); + connect(copyEscapedPatternAction, &QAction::triggered, this, &RegularExpressionDialog::copyEscapedPatternToClipboard); + escapedPatternLineEdit->addAction(copyEscapedPatternAction, QLineEdit::TrailingPosition); +#endif + + layout->addRow(tr("&Escaped pattern:"), escapedPatternLineEdit); + + subjectTextEdit = new QPlainTextEdit; + layout->addRow(tr("&Subject text:"), subjectTextEdit); + + caseInsensitiveOptionCheckBox = new QCheckBox(tr("Case insensitive (/i)")); + dotMatchesEverythingOptionCheckBox = new QCheckBox(tr("Dot matches everything (/s)")); + multilineOptionCheckBox = new QCheckBox(tr("Multiline (/m)")); + extendedPatternSyntaxOptionCheckBox = new QCheckBox(tr("Extended pattern (/x)")); + invertedGreedinessOptionCheckBox = new QCheckBox(tr("Inverted greediness")); + dontCaptureOptionCheckBox = new QCheckBox(tr("Don't capture")); + useUnicodePropertiesOptionCheckBox = new QCheckBox(tr("Use unicode properties (/u)")); + optimizeOnFirstUsageOptionCheckBox = new QCheckBox(tr("Optimize on first usage")); + dontAutomaticallyOptimizeOptionCheckBox = new QCheckBox(tr("Don't automatically optimize")); + + QGridLayout *patternOptionsCheckBoxLayout = new QGridLayout; + int gridRow = 0; + patternOptionsCheckBoxLayout->addWidget(caseInsensitiveOptionCheckBox, gridRow, 1); + patternOptionsCheckBoxLayout->addWidget(dotMatchesEverythingOptionCheckBox, gridRow, 2); + ++gridRow; + patternOptionsCheckBoxLayout->addWidget(multilineOptionCheckBox, gridRow, 1); + patternOptionsCheckBoxLayout->addWidget(extendedPatternSyntaxOptionCheckBox, gridRow, 2); + ++gridRow; + patternOptionsCheckBoxLayout->addWidget(invertedGreedinessOptionCheckBox, gridRow, 1); + patternOptionsCheckBoxLayout->addWidget(dontCaptureOptionCheckBox, gridRow, 2); + ++gridRow; + patternOptionsCheckBoxLayout->addWidget(useUnicodePropertiesOptionCheckBox, gridRow, 1); + patternOptionsCheckBoxLayout->addWidget(optimizeOnFirstUsageOptionCheckBox, gridRow, 2); + ++gridRow; + patternOptionsCheckBoxLayout->addWidget(dontAutomaticallyOptimizeOptionCheckBox, gridRow, 1); + + layout->addRow(tr("Pattern options:"), patternOptionsCheckBoxLayout); + + offsetSpinBox = new QSpinBox; + layout->addRow(tr("Match &offset:"), offsetSpinBox); + + matchTypeComboBox = new QComboBox; + matchTypeComboBox->addItem(tr("Normal"), QVariant::fromValue(QRegularExpression::NormalMatch)); + matchTypeComboBox->addItem(tr("Partial prefer complete"), QVariant::fromValue(QRegularExpression::PartialPreferCompleteMatch)); + matchTypeComboBox->addItem(tr("Partial prefer first"), QVariant::fromValue(QRegularExpression::PartialPreferFirstMatch)); + matchTypeComboBox->addItem(tr("No match"), QVariant::fromValue(QRegularExpression::NoMatch)); + layout->addRow(tr("Match &type:"), matchTypeComboBox); + + dontCheckSubjectStringMatchOptionCheckBox = new QCheckBox(tr("Don't check subject string")); + anchoredMatchOptionCheckBox = new QCheckBox(tr("Anchored match")); + + QGridLayout *matchOptionsCheckBoxLayout = new QGridLayout; + matchOptionsCheckBoxLayout->addWidget(dontCheckSubjectStringMatchOptionCheckBox, 0, 0); + matchOptionsCheckBoxLayout->addWidget(anchoredMatchOptionCheckBox, 0, 1); + layout->addRow(tr("Match options:"), matchOptionsCheckBoxLayout); + + return container; +} + +QWidget *RegularExpressionDialog::setupRightUi() +{ + QWidget *container = new QWidget; + + QFormLayout *layout = new QFormLayout(container); + layout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow); + layout->setMargin(0); + + QLabel *matchInfoLabel = new QLabel(tr("<h3>Match information</h3>")); + layout->addRow(matchInfoLabel); + + matchDetailsTreeWidget = new QTreeWidget; + matchDetailsTreeWidget->setHeaderLabels(QStringList() << tr("Match index") << tr("Group index") << tr("Captured string")); + matchDetailsTreeWidget->setSizeAdjustPolicy(QTreeWidget::AdjustToContents); + layout->addRow(tr("Match details:"), matchDetailsTreeWidget); + + QFrame *horizontalSeparator = new QFrame; + horizontalSeparator->setFrameStyle(QFrame::HLine | QFrame::Sunken); + layout->addRow(horizontalSeparator); + + QLabel *regexpInfoLabel = new QLabel(tr("<h3>Regular expression information</h3>")); + layout->addRow(regexpInfoLabel); + + regexpStatusLabel = new QLabel(tr("Valid")); + regexpStatusLabel->setWordWrap(true); + layout->addRow(tr("Pattern status:"), regexpStatusLabel); + + namedGroupsTreeWidget = new QTreeWidget; + namedGroupsTreeWidget->setHeaderLabels(QStringList() << tr("Index") << tr("Named group")); + namedGroupsTreeWidget->setSizeAdjustPolicy(QTreeWidget::AdjustToContents); + namedGroupsTreeWidget->setRootIsDecorated(false); + layout->addRow(tr("Named groups:"), namedGroupsTreeWidget); + + return container; +} diff --git a/examples/widgets/tools/regularexpression/regularexpressiondialog.h b/examples/widgets/tools/regularexpression/regularexpressiondialog.h new file mode 100644 index 0000000000..1b3b147c14 --- /dev/null +++ b/examples/widgets/tools/regularexpression/regularexpressiondialog.h @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> +** Copyright (C) 2015 Samuel Gaist <samuel.gaist@edeltech.ch> +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** 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 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$ +** +****************************************************************************/ + +#ifndef REGULAREXPRESSIONDIALOG_H +#define REGULAREXPRESSIONDIALOG_H + +#include <QDialog> + +QT_BEGIN_NAMESPACE +class QCheckBox; +class QComboBox; +class QLabel; +class QLineEdit; +class QSpinBox; +class QPlainTextEdit; +class QTreeWidget; +QT_END_NAMESPACE + +class RegularExpressionDialog : public QDialog +{ + Q_OBJECT + +public: + RegularExpressionDialog(QWidget *parent = 0); + +private: + void refresh(); + void copyEscapedPatternToClipboard(); + void setupUi(); + QWidget *setupLeftUi(); + QWidget *setupRightUi(); + + QLineEdit *patternLineEdit; + QLineEdit *escapedPatternLineEdit; + + QPlainTextEdit *subjectTextEdit; + + QCheckBox *caseInsensitiveOptionCheckBox; + QCheckBox *dotMatchesEverythingOptionCheckBox; + QCheckBox *multilineOptionCheckBox; + QCheckBox *extendedPatternSyntaxOptionCheckBox; + QCheckBox *invertedGreedinessOptionCheckBox; + QCheckBox *dontCaptureOptionCheckBox; + QCheckBox *useUnicodePropertiesOptionCheckBox; + QCheckBox *optimizeOnFirstUsageOptionCheckBox; + QCheckBox *dontAutomaticallyOptimizeOptionCheckBox; + + QSpinBox *offsetSpinBox; + + QComboBox *matchTypeComboBox; + + QCheckBox *anchoredMatchOptionCheckBox; + QCheckBox *dontCheckSubjectStringMatchOptionCheckBox; + + QTreeWidget *matchDetailsTreeWidget; + + QLabel *regexpStatusLabel; + QTreeWidget *namedGroupsTreeWidget; +}; + +#endif diff --git a/examples/widgets/tools/tools.pro b/examples/widgets/tools/tools.pro index 7178411110..282f8dedea 100644 --- a/examples/widgets/tools/tools.pro +++ b/examples/widgets/tools/tools.pro @@ -8,6 +8,7 @@ SUBDIRS = \ plugandpaintplugins \ plugandpaint \ regexp \ + regularexpression \ settingseditor \ styleplugin \ treemodelcompleter \ diff --git a/examples/widgets/tutorials/addressbook/part7/addressbook.cpp b/examples/widgets/tutorials/addressbook/part7/addressbook.cpp index 45ded876a7..6764423d71 100644 --- a/examples/widgets/tutorials/addressbook/part7/addressbook.cpp +++ b/examples/widgets/tutorials/addressbook/part7/addressbook.cpp @@ -370,7 +370,6 @@ void AddressBook::loadFromFile() QDataStream in(&file); in.setVersion(QDataStream::Qt_4_3); - contacts.empty(); // empty existing contacts in >> contacts; QMap<QString, QString>::iterator i = contacts.begin(); diff --git a/examples/widgets/widgets/icons/icons.pro b/examples/widgets/widgets/icons/icons.pro index 21165163aa..4312a40e95 100644 --- a/examples/widgets/widgets/icons/icons.pro +++ b/examples/widgets/widgets/icons/icons.pro @@ -24,5 +24,5 @@ wince { } else { imageFiles.path = images } - DEPLOYMENT += imageFiles + INSTALLS += imageFiles } diff --git a/examples/widgets/widgets/movie/movie.pro b/examples/widgets/widgets/movie/movie.pro index 86d85552c2..94d86454d8 100644 --- a/examples/widgets/widgets/movie/movie.pro +++ b/examples/widgets/widgets/movie/movie.pro @@ -14,5 +14,5 @@ INSTALLS += target wince { addFiles.files += *.gif addFiles.path = . - DEPLOYMENT += addFiles + INSTALLS += addFiles } |