aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/quickcontrols2/texteditor/CMakeLists.txt16
-rw-r--r--examples/quickcontrols2/texteditor/documenthandler.cpp125
-rw-r--r--examples/quickcontrols2/texteditor/documenthandler.h32
-rw-r--r--examples/quickcontrols2/texteditor/fonts/fontello.ttfbin10152 -> 10208 bytes
-rw-r--r--examples/quickcontrols2/texteditor/qml/texteditor.qml192
-rw-r--r--examples/quickcontrols2/texteditor/texteditor.html14
6 files changed, 157 insertions, 222 deletions
diff --git a/examples/quickcontrols2/texteditor/CMakeLists.txt b/examples/quickcontrols2/texteditor/CMakeLists.txt
index 74c76943f7..187d1a88b4 100644
--- a/examples/quickcontrols2/texteditor/CMakeLists.txt
+++ b/examples/quickcontrols2/texteditor/CMakeLists.txt
@@ -7,7 +7,6 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
if(NOT DEFINED INSTALL_EXAMPLESDIR)
set(INSTALL_EXAMPLESDIR "examples")
@@ -15,19 +14,14 @@ endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols2/texteditor")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS QuickControls2)
+find_package(Qt6 COMPONENTS Core Gui Quick QuickControls2)
+find_package(Qt6 COMPONENTS Widgets)
-qt_add_executable(texteditor
- documenthandler.cpp documenthandler.h
+qt_add_executable(texteditor WIN32 MACOSX_BUNDLE
+ documenthandler.cpp
texteditor.cpp
)
-set_target_properties(texteditor PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
+
target_link_libraries(texteditor PUBLIC
Qt::Core
Qt::Gui
diff --git a/examples/quickcontrols2/texteditor/documenthandler.cpp b/examples/quickcontrols2/texteditor/documenthandler.cpp
index e82fbb8c55..d904e6f637 100644
--- a/examples/quickcontrols2/texteditor/documenthandler.cpp
+++ b/examples/quickcontrols2/texteditor/documenthandler.cpp
@@ -82,7 +82,7 @@ void DocumentHandler::setDocument(QQuickTextDocument *document)
return;
if (m_document)
- m_document->textDocument()->disconnect(this);
+ disconnect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &DocumentHandler::modifiedChanged);
m_document = document;
if (m_document)
connect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &DocumentHandler::modifiedChanged);
@@ -132,23 +132,6 @@ void DocumentHandler::setSelectionEnd(int position)
emit selectionEndChanged();
}
-QString DocumentHandler::fontFamily() const
-{
- QTextCursor cursor = textCursor();
- if (cursor.isNull())
- return QString();
- QTextCharFormat format = cursor.charFormat();
- return format.font().family();
-}
-
-void DocumentHandler::setFontFamily(const QString &family)
-{
- QTextCharFormat format;
- format.setFontFamily(family);
- mergeFormatOnWordOrSelection(format);
- emit fontFamilyChanged();
-}
-
QColor DocumentHandler::textColor() const
{
QTextCursor cursor = textCursor();
@@ -183,84 +166,6 @@ void DocumentHandler::setAlignment(Qt::Alignment alignment)
emit alignmentChanged();
}
-bool DocumentHandler::bold() const
-{
- QTextCursor cursor = textCursor();
- if (cursor.isNull())
- return false;
- return textCursor().charFormat().fontWeight() == QFont::Bold;
-}
-
-void DocumentHandler::setBold(bool bold)
-{
- QTextCharFormat format;
- format.setFontWeight(bold ? QFont::Bold : QFont::Normal);
- mergeFormatOnWordOrSelection(format);
- emit boldChanged();
-}
-
-bool DocumentHandler::italic() const
-{
- QTextCursor cursor = textCursor();
- if (cursor.isNull())
- return false;
- return textCursor().charFormat().fontItalic();
-}
-
-void DocumentHandler::setItalic(bool italic)
-{
- QTextCharFormat format;
- format.setFontItalic(italic);
- mergeFormatOnWordOrSelection(format);
- emit italicChanged();
-}
-
-bool DocumentHandler::underline() const
-{
- QTextCursor cursor = textCursor();
- if (cursor.isNull())
- return false;
- return textCursor().charFormat().fontUnderline();
-}
-
-void DocumentHandler::setUnderline(bool underline)
-{
- QTextCharFormat format;
- format.setFontUnderline(underline);
- mergeFormatOnWordOrSelection(format);
- emit underlineChanged();
-}
-
-int DocumentHandler::fontSize() const
-{
- QTextCursor cursor = textCursor();
- if (cursor.isNull())
- return 0;
- QTextCharFormat format = cursor.charFormat();
- return format.font().pointSize();
-}
-
-void DocumentHandler::setFontSize(int size)
-{
- if (size <= 0)
- return;
-
- QTextCursor cursor = textCursor();
- if (cursor.isNull())
- return;
-
- if (!cursor.hasSelection())
- cursor.select(QTextCursor::WordUnderCursor);
-
- if (cursor.charFormat().property(QTextFormat::FontPointSize).toInt() == size)
- return;
-
- QTextCharFormat format;
- format.setFontPointSize(size);
- mergeFormatOnWordOrSelection(format);
- emit fontSizeChanged();
-}
-
QString DocumentHandler::fileName() const
{
const QString filePath = QQmlFile::urlToLocalFileOrQrc(m_fileUrl);
@@ -348,13 +253,9 @@ void DocumentHandler::saveAs(const QUrl &fileUrl)
void DocumentHandler::reset()
{
- emit fontFamilyChanged();
emit alignmentChanged();
- emit boldChanged();
- emit italicChanged();
- emit underlineChanged();
- emit fontSizeChanged();
emit textColorChanged();
+ emit fontChanged();
}
QTextCursor DocumentHandler::textCursor() const
@@ -400,4 +301,26 @@ void DocumentHandler::setModified(bool m)
m_document->textDocument()->setModified(m);
}
+QFont DocumentHandler::font() const
+{
+ QTextCursor cursor = textCursor();
+ if (cursor.isNull())
+ return m_document->textDocument()->defaultFont();
+ QTextCharFormat format = cursor.charFormat();
+ return format.font();
+}
+
+void DocumentHandler::setFont(const QFont & font){
+
+ QTextCursor cursor = textCursor();
+ if (!cursor.isNull() && cursor.charFormat().font() == font)
+ return;
+
+ QTextCharFormat format;
+ format.setFont(font);
+ mergeFormatOnWordOrSelection(format);
+
+ emit fontChanged();
+}
+
#include "moc_documenthandler.cpp"
diff --git a/examples/quickcontrols2/texteditor/documenthandler.h b/examples/quickcontrols2/texteditor/documenthandler.h
index 3863eb49e7..66b5957a20 100644
--- a/examples/quickcontrols2/texteditor/documenthandler.h
+++ b/examples/quickcontrols2/texteditor/documenthandler.h
@@ -71,14 +71,9 @@ class DocumentHandler : public QObject
Q_PROPERTY(int selectionEnd READ selectionEnd WRITE setSelectionEnd NOTIFY selectionEndChanged)
Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor NOTIFY textColorChanged)
- Q_PROPERTY(QString fontFamily READ fontFamily WRITE setFontFamily NOTIFY fontFamilyChanged)
Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged)
- Q_PROPERTY(bool bold READ bold WRITE setBold NOTIFY boldChanged)
- Q_PROPERTY(bool italic READ italic WRITE setItalic NOTIFY italicChanged)
- Q_PROPERTY(bool underline READ underline WRITE setUnderline NOTIFY underlineChanged)
-
- Q_PROPERTY(int fontSize READ fontSize WRITE setFontSize NOTIFY fontSizeChanged)
+ Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
Q_PROPERTY(QString fileName READ fileName NOTIFY fileUrlChanged)
Q_PROPERTY(QString fileType READ fileType NOTIFY fileUrlChanged)
@@ -101,26 +96,14 @@ public:
int selectionEnd() const;
void setSelectionEnd(int position);
- QString fontFamily() const;
- void setFontFamily(const QString &family);
-
QColor textColor() const;
void setTextColor(const QColor &color);
Qt::Alignment alignment() const;
void setAlignment(Qt::Alignment alignment);
- bool bold() const;
- void setBold(bool bold);
-
- bool italic() const;
- void setItalic(bool italic);
-
- bool underline() const;
- void setUnderline(bool underline);
-
- int fontSize() const;
- void setFontSize(int size);
+ QFont font() const;
+ void setFont(const QFont & font);
QString fileName() const;
QString fileType() const;
@@ -139,16 +122,10 @@ Q_SIGNALS:
void selectionStartChanged();
void selectionEndChanged();
- void fontFamilyChanged();
+ void fontChanged();
void textColorChanged();
void alignmentChanged();
- void boldChanged();
- void italicChanged();
- void underlineChanged();
-
- void fontSizeChanged();
-
void textChanged();
void fileUrlChanged();
@@ -169,7 +146,6 @@ private:
int m_selectionStart;
int m_selectionEnd;
- QFont m_font;
QUrl m_fileUrl;
};
diff --git a/examples/quickcontrols2/texteditor/fonts/fontello.ttf b/examples/quickcontrols2/texteditor/fonts/fontello.ttf
index db957652d3..f02b44ec12 100644
--- a/examples/quickcontrols2/texteditor/fonts/fontello.ttf
+++ b/examples/quickcontrols2/texteditor/fonts/fontello.ttf
Binary files differ
diff --git a/examples/quickcontrols2/texteditor/qml/texteditor.qml b/examples/quickcontrols2/texteditor/qml/texteditor.qml
index 0c0f75e113..5f47223bd3 100644
--- a/examples/quickcontrols2/texteditor/qml/texteditor.qml
+++ b/examples/quickcontrols2/texteditor/qml/texteditor.qml
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@@ -49,9 +49,11 @@
****************************************************************************/
import QtQuick
+import QtCore
import QtQuick.Controls
import QtQuick.Window
-import Qt.labs.platform
+import QtQuick.Dialogs
+import Qt.labs.platform as Platform
import io.qt.examples.texteditor
@@ -70,102 +72,125 @@ ApplicationWindow {
y = Screen.height / 2 - height / 2
}
- Shortcut {
- sequence: StandardKey.Open
- onActivated: openDialog.open()
+ Action {
+ id: openAction
+ shortcut: StandardKey.Open
+ onTriggered: openDialog.open()
}
- Shortcut {
- sequence: StandardKey.SaveAs
- onActivated: saveDialog.open()
+
+ Action {
+ id: saveAsAction
+ shortcut: StandardKey.SaveAs
+ onTriggered: saveDialog.open()
}
- Shortcut {
- sequence: StandardKey.Quit
- onActivated: close()
+
+ Action {
+ id: quitAction
+ shortcut: StandardKey.Quit
+ onTriggered: close()
}
- Shortcut {
- sequence: StandardKey.Copy
- onActivated: textArea.copy()
+
+ Action {
+ id: copyAction
+ shortcut: StandardKey.Copy
+ onTriggered: textArea.copy()
}
- Shortcut {
- sequence: StandardKey.Cut
- onActivated: textArea.cut()
+
+ Action {
+ id: cutAction
+ shortcut: StandardKey.Cut
+ onTriggered: textArea.cut()
}
- Shortcut {
- sequence: StandardKey.Paste
- onActivated: textArea.paste()
+
+ Action {
+ id: pasteAction
+ shortcut: StandardKey.Paste
+ onTriggered: textArea.paste()
}
- Shortcut {
- sequence: StandardKey.Bold
- onActivated: document.bold = !document.bold
+
+ Action {
+ id: boldAction
+ shortcut: StandardKey.Bold
+ onTriggered: document.bold = !document.bold
}
- Shortcut {
- sequence: StandardKey.Italic
- onActivated: document.italic = !document.italic
+
+ Action {
+ id: italicAction
+ shortcut: StandardKey.Italic
+ onTriggered: document.italic = !document.italic
}
- Shortcut {
- sequence: StandardKey.Underline
- onActivated: document.underline = !document.underline
+
+ Action {
+ id: underlineAction
+ shortcut: StandardKey.Underline
+ onTriggered: document.underline = !document.underline
}
- MenuBar {
- Menu {
+ Platform.MenuBar {
+ Platform.Menu {
title: qsTr("&File")
- MenuItem {
+ Platform.MenuItem {
text: qsTr("&Open")
onTriggered: openDialog.open()
}
- MenuItem {
+ Platform.MenuItem {
text: qsTr("&Save As...")
onTriggered: saveDialog.open()
}
- MenuItem {
+ Platform.MenuItem {
text: qsTr("&Quit")
onTriggered: close()
}
}
- Menu {
+ Platform.Menu {
title: qsTr("&Edit")
- MenuItem {
+ Platform.MenuItem {
text: qsTr("&Copy")
enabled: textArea.selectedText
onTriggered: textArea.copy()
}
- MenuItem {
+ Platform.MenuItem {
text: qsTr("Cu&t")
enabled: textArea.selectedText
onTriggered: textArea.cut()
}
- MenuItem {
+ Platform.MenuItem {
text: qsTr("&Paste")
enabled: textArea.canPaste
onTriggered: textArea.paste()
}
}
- Menu {
+ Platform.Menu {
title: qsTr("F&ormat")
- MenuItem {
+ Platform.MenuItem {
text: qsTr("&Bold")
checkable: true
checked: document.bold
onTriggered: document.bold = !document.bold
}
- MenuItem {
+ Platform.MenuItem {
text: qsTr("&Italic")
checkable: true
checked: document.italic
onTriggered: document.italic = !document.italic
}
- MenuItem {
+ Platform.MenuItem {
text: qsTr("&Underline")
checkable: true
checked: document.underline
onTriggered: document.underline = !document.underline
}
+ Platform.MenuItem {
+ text: qsTr("&Strikeout")
+ checkable: true
+ checked: document.strikeout
+ onTriggered: document.strikeout = !document.strikeout
+ }
}
}
@@ -174,7 +199,7 @@ ApplicationWindow {
fileMode: FileDialog.OpenFile
selectedNameFilter.index: 1
nameFilters: ["Text files (*.txt)", "HTML files (*.html *.htm)", "Markdown files (*.md *.markdown)"]
- folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
+ currentFolder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
onAccepted: document.load(file)
}
@@ -184,32 +209,31 @@ ApplicationWindow {
defaultSuffix: document.fileType
nameFilters: openDialog.nameFilters
selectedNameFilter.index: document.fileType === "txt" ? 0 : 1
- folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
+ currentFolder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
onAccepted: document.saveAs(file)
}
FontDialog {
id: fontDialog
- onAccepted: {
- document.fontFamily = font.family;
- document.fontSize = font.pointSize;
- }
+
+ onAccepted: document.font = fontDialog.selectedFont
+ onVisibleChanged: if (visible) currentFont = document.font
}
- ColorDialog {
+ Platform.ColorDialog {
id: colorDialog
currentColor: "black"
}
- MessageDialog {
+ Platform.MessageDialog {
id: errorDialog
}
- MessageDialog {
+ Platform.MessageDialog {
id : quitDialog
title: qsTr("Quit?")
text: qsTr("The file has been modified. Quit anyway?")
- buttons: (MessageDialog.Yes | MessageDialog.No)
+ buttons: (Platform.MessageDialog.Yes | Platform.MessageDialog.No)
onYesClicked: Qt.quit()
}
@@ -226,7 +250,8 @@ ApplicationWindow {
id: openButton
text: "\uF115" // icon-folder-open-empty
font.family: "fontello"
- onClicked: openDialog.open()
+ action: openAction
+ focusPolicy: Qt.TabFocus
}
ToolSeparator {
contentItem.visible: fileRow.y === editRow.y
@@ -241,7 +266,7 @@ ApplicationWindow {
font.family: "fontello"
focusPolicy: Qt.TabFocus
enabled: textArea.selectedText
- onClicked: textArea.copy()
+ action: copyAction
}
ToolButton {
id: cutButton
@@ -249,7 +274,7 @@ ApplicationWindow {
font.family: "fontello"
focusPolicy: Qt.TabFocus
enabled: textArea.selectedText
- onClicked: textArea.cut()
+ action: cutAction
}
ToolButton {
id: pasteButton
@@ -257,7 +282,7 @@ ApplicationWindow {
font.family: "fontello"
focusPolicy: Qt.TabFocus
enabled: textArea.canPaste
- onClicked: textArea.paste()
+ action: pasteAction
}
ToolSeparator {
contentItem.visible: editRow.y === formatRow.y
@@ -273,7 +298,7 @@ ApplicationWindow {
focusPolicy: Qt.TabFocus
checkable: true
checked: document.bold
- onClicked: document.bold = !document.bold
+ action: boldAction
}
ToolButton {
id: italicButton
@@ -282,7 +307,7 @@ ApplicationWindow {
focusPolicy: Qt.TabFocus
checkable: true
checked: document.italic
- onClicked: document.italic = !document.italic
+ action: italicAction
}
ToolButton {
id: underlineButton
@@ -291,7 +316,16 @@ ApplicationWindow {
focusPolicy: Qt.TabFocus
checkable: true
checked: document.underline
- onClicked: document.underline = !document.underline
+ action: underlineAction
+ }
+ ToolButton {
+ id: strikeoutButton
+ text: "\uF0CC"
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ checkable: true
+ checked: document.strikeout
+ onClicked: document.strikeout = !document.strikeout
}
ToolButton {
id: fontFamilyToolButton
@@ -300,11 +334,9 @@ ApplicationWindow {
font.bold: document.bold
font.italic: document.italic
font.underline: document.underline
- onClicked: {
- fontDialog.currentFont.family = document.fontFamily;
- fontDialog.currentFont.pointSize = document.fontSize;
- fontDialog.open();
- }
+ font.strikeout: document.strikeout
+ focusPolicy: Qt.TabFocus
+ onClicked: fontDialog.open()
}
ToolButton {
id: textColorButton
@@ -383,17 +415,25 @@ ApplicationWindow {
selectionStart: textArea.selectionStart
selectionEnd: textArea.selectionEnd
textColor: colorDialog.color
+
+ property alias family: document.font.family
+ property alias bold: document.font.bold
+ property alias italic: document.font.italic
+ property alias underline: document.font.underline
+ property alias strikeout: document.font.strikeout
+ property alias size: document.font.pointSize
+
Component.onCompleted: {
if (Qt.application.arguments.length === 2)
document.load("file:" + Qt.application.arguments[1]);
else
document.load("qrc:/texteditor.html")
}
- onLoaded: {
+ onLoaded: function (text, format) {
textArea.textFormat = format
textArea.text = text
}
- onError: {
+ onError: function (message) {
errorDialog.text = message
errorDialog.visible = true
}
@@ -426,45 +466,47 @@ ApplicationWindow {
onClicked: contextMenu.open()
}
- onLinkActivated: Qt.openUrlExternally(link)
+ onLinkActivated: function (link) {
+ Qt.openUrlExternally(link)
+ }
}
ScrollBar.vertical: ScrollBar {}
}
- Menu {
+ Platform.Menu {
id: contextMenu
- MenuItem {
+ Platform.MenuItem {
text: qsTr("Copy")
enabled: textArea.selectedText
onTriggered: textArea.copy()
}
- MenuItem {
+ Platform.MenuItem {
text: qsTr("Cut")
enabled: textArea.selectedText
onTriggered: textArea.cut()
}
- MenuItem {
+ Platform.MenuItem {
text: qsTr("Paste")
enabled: textArea.canPaste
onTriggered: textArea.paste()
}
- MenuSeparator {}
+ Platform.MenuSeparator {}
- MenuItem {
+ Platform.MenuItem {
text: qsTr("Font...")
onTriggered: fontDialog.open()
}
- MenuItem {
+ Platform.MenuItem {
text: qsTr("Color...")
onTriggered: colorDialog.open()
}
}
- onClosing: {
+ onClosing: function (close) {
if (document.modified) {
quitDialog.open()
close.accepted = false
diff --git a/examples/quickcontrols2/texteditor/texteditor.html b/examples/quickcontrols2/texteditor/texteditor.html
index 41705f85f0..3c59a053c5 100644
--- a/examples/quickcontrols2/texteditor/texteditor.html
+++ b/examples/quickcontrols2/texteditor/texteditor.html
@@ -31,13 +31,13 @@
</p>
<ul>
- <li><a href="https://doc.qt.io/qt-5/qml-qt-labs-platform-menu.html">Menu</a> - provides a QML API for native platform menu popups.</li>
- <li><a href="https://doc.qt.io/qt-5/qml-qt-labs-platform-menubar.html">MenuBar</a> - provides a QML API for native platform menubars.</li>
- <li><a href="https://doc.qt.io/qt-5/qml-qt-labs-platform-menuitem.html">MenuItem</a> - provides a QML API for native platform menu items.</li>
- <li><a href="https://doc.qt.io/qt-5/qml-qt-labs-platform-filedialog.html">FileDialog</a> - provides a QML API for native platform file dialogs.</li>
- <li><a href="https://doc.qt.io/qt-5/qml-qt-labs-platform-fontdialog.html">FontDialog</a> - provides a QML API for native platform font dialogs.</li>
- <li><a href="https://doc.qt.io/qt-5/qml-qt-labs-platform-colordialog.html">ColorDialog</a> - provides a QML API for native platform color dialogs.</li>
- <li><a href="https://doc.qt.io/qt-5/qml-qt-labs-platform-messagedialog.html">MessageDialog</a> - provides a QML API for native platform message dialogs.</li>
+ <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-menu.html">Menu</a> - provides a QML API for native platform menu popups.</li>
+ <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-menubar.html">MenuBar</a> - provides a QML API for native platform menubars.</li>
+ <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-menuitem.html">MenuItem</a> - provides a QML API for native platform menu items.</li>
+ <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-filedialog.html">FileDialog</a> - provides a QML API for native platform file dialogs.</li>
+ <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-fontdialog.html">FontDialog</a> - provides a QML API for native platform font dialogs.</li>
+ <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-colordialog.html">ColorDialog</a> - provides a QML API for native platform color dialogs.</li>
+ <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-messagedialog.html">MessageDialog</a> - provides a QML API for native platform message dialogs.</li>
</ul>
</body>
</html>