Qt Quick Controls 1 - Text Editor Example▲
Sélectionnez
/****************************************************************************
**
** 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$
**
****************************************************************************/
import
QtQuick 2.2
import
QtQuick.Controls 1.2
import
QtQuick.Layouts 1.0
import
QtQuick.Dialogs 1.1
import
QtQuick.Window 2.1
import
org.qtproject.example 1.0
ApplicationWindow
{
visible
:
true
width
:
640
height
:
480
minimumWidth
:
400
minimumHeight
:
300
title
:
document.documentTitle +
" - Text Editor Example"
MessageDialog
{
id
:
aboutBox
title
:
"About Text"
text
:
"This is a basic text editor \nwritten with Qt Quick Controls"
icon
:
StandardIcon.Information
}
Action
{
id
:
cutAction
text
:
"Cut"
shortcut
:
"ctrl+x"
iconSource
:
"images/editcut.png"
iconName
:
"edit-cut"
onTriggered
:
textArea.cut()
}
Action
{
id
:
copyAction
text
:
"Copy"
shortcut
:
"Ctrl+C"
iconSource
:
"images/editcopy.png"
iconName
:
"edit-copy"
onTriggered
:
textArea.copy()
}
Action
{
id
:
pasteAction
text
:
"Paste"
shortcut
:
"ctrl+v"
iconSource
:
"images/editpaste.png"
iconName
:
"edit-paste"
onTriggered
:
textArea.paste()
}
Action
{
id
:
alignLeftAction
text
:
"&Left"
iconSource
:
"images/textleft.png"
iconName
:
"format-justify-left"
shortcut
:
"ctrl+l"
onTriggered
:
document.alignment =
Qt.AlignLeft
checkable
:
true
checked
:
document.alignment ==
Qt.AlignLeft
}
Action
{
id
:
alignCenterAction
text
:
"C&enter"
iconSource
:
"images/textcenter.png"
iconName
:
"format-justify-center"
onTriggered
:
document.alignment =
Qt.AlignHCenter
checkable
:
true
checked
:
document.alignment ==
Qt.AlignHCenter
}
Action
{
id
:
alignRightAction
text
:
"&Right"
iconSource
:
"images/textright.png"
iconName
:
"format-justify-right"
onTriggered
:
document.alignment =
Qt.AlignRight
checkable
:
true
checked
:
document.alignment ==
Qt.AlignRight
}
Action
{
id
:
alignJustifyAction
text
:
"&Justify"
iconSource
:
"images/textjustify.png"
iconName
:
"format-justify-fill"
onTriggered
:
document.alignment =
Qt.AlignJustify
checkable
:
true
checked
:
document.alignment ==
Qt.AlignJustify
}
Action
{
id
:
boldAction
text
:
"&Bold"
iconSource
:
"images/textbold.png"
iconName
:
"format-text-bold"
onTriggered
:
document.bold =
!
document.bold
checkable
:
true
checked
:
document.bold
}
Action
{
id
:
italicAction
text
:
"&Italic"
iconSource
:
"images/textitalic.png"
iconName
:
"format-text-italic"
onTriggered
:
document.italic =
!
document.italic
checkable
:
true
checked
:
document.italic
}
Action
{
id
:
underlineAction
text
:
"&Underline"
iconSource
:
"images/textunder.png"
iconName
:
"format-text-underline"
onTriggered
:
document.underline =
!
document.underline
checkable
:
true
checked
:
document.underline
}
FileDialog
{
id
:
fileDialog
nameFilters
:
["Text files (*.txt)"
, "HTML files (*.html, *.htm)"
]
onAccepted
: {
if (
fileDialog.
selectExisting)
document
.
fileUrl =
fileUrl
else
document
.saveAs
(
fileUrl,
selectedNameFilter)
}
}
ColorDialog
{
id
:
colorDialog
color
:
"black"
}
Action
{
id
:
fileOpenAction
iconSource
:
"images/fileopen.png"
iconName
:
"document-open"
text
:
"Open"
onTriggered
: {
fileDialog.
selectExisting =
true
fileDialog.open
(
)
}
}
Action
{
id
:
fileSaveAsAction
iconSource
:
"images/filesave.png"
iconName
:
"document-save"
text
:
"Save As…"
onTriggered
: {
fileDialog.
selectExisting =
false
fileDialog.open
(
)
}
}
menuBar
:
MenuBar
{
Menu
{
title
:
"&File"
MenuItem
{
action
:
fileOpenAction }
MenuItem
{
action
:
fileSaveAsAction }
MenuItem
{
text
:
"Quit"
; onTriggered
:
Qt.quit() }
}
Menu
{
title
:
"&Edit"
MenuItem
{
action
:
copyAction }
MenuItem
{
action
:
cutAction }
MenuItem
{
action
:
pasteAction }
}
Menu
{
title
:
"F&ormat"
MenuItem
{
action
:
boldAction }
MenuItem
{
action
:
italicAction }
MenuItem
{
action
:
underlineAction }
MenuSeparator
{}
MenuItem
{
action
:
alignLeftAction }
MenuItem
{
action
:
alignCenterAction }
MenuItem
{
action
:
alignRightAction }
MenuItem
{
action
:
alignJustifyAction }
MenuSeparator
{}
MenuItem
{
text
:
"&Color ..."
onTriggered
: {
colorDialog.
color =
document
.
textColor
colorDialog.open
(
)
}
}
}
Menu
{
title
:
"&Help"
MenuItem
{
text
:
"About..."
; onTriggered
:
aboutBox.open() }
}
}
toolBar
:
ToolBar
{
id
:
mainToolBar
width
:
parent.width
RowLayout
{
anchors.fill
:
parent
spacing
:
0
ToolButton
{
action
:
fileOpenAction }
ToolBarSeparator {}
ToolButton
{
action
:
copyAction }
ToolButton
{
action
:
cutAction }
ToolButton
{
action
:
pasteAction }
ToolBarSeparator {}
ToolButton
{
action
:
boldAction }
ToolButton
{
action
:
italicAction }
ToolButton
{
action
:
underlineAction }
ToolBarSeparator {}
ToolButton
{
action
:
alignLeftAction }
ToolButton
{
action
:
alignCenterAction }
ToolButton
{
action
:
alignRightAction }
ToolButton
{
action
:
alignJustifyAction }
ToolBarSeparator {}
ToolButton
{
id
:
colorButton
property
var color
:
document.textColor
Rectangle
{
id
:
colorRect
anchors.fill
:
parent
anchors.margins
:
8
color
:
Qt.darker(document.textColor, colorButton.pressed ? 1.4 :
1
)
border.width
:
1
border.color
:
Qt.darker(colorRect.color, 2
)
}
onClicked
: {
colorDialog.
color =
document
.
textColor
colorDialog.open
(
)
}
}
Item
{
Layout.fillWidth
:
true
}
}
}
ToolBar
{
id
:
secondaryToolBar
width
:
parent.width
RowLayout
{
anchors.fill
:
parent
ComboBox
{
id
:
fontFamilyComboBox
implicitWidth
:
150
model
:
Qt.fontFamilies()
property
bool
special :
false
onActivated
: {
if (
special ==
false ||
index !=
0
) {
document
.
fontFamily =
textAt
(
index)
}
}
}
SpinBox
{
id
:
fontSizeSpinBox
activeFocusOnPress
:
false
implicitWidth
:
50
value
:
0
property
bool
valueGuard
:
true
onValueChanged
:
if
(valueGuard) document.fontSize =
value
}
Item
{
Layout.fillWidth
:
true
}
}
}
TextArea
{
Accessible.name
:
"document"
id
:
textArea
frameVisible
:
false
width
:
parent.width
anchors.top
:
secondaryToolBar.bottom
anchors.bottom
:
parent.bottom
baseUrl
:
"qrc:/"
text
:
document.text
textFormat
:
Qt.RichText
Component.onCompleted
:
forceActiveFocus
()
}
MessageDialog
{
id
:
errorDialog
}
DocumentHandler {
id
:
document
target
:
textArea
cursorPosition
:
textArea.cursorPosition
selectionStart
:
textArea.selectionStart
selectionEnd
:
textArea.selectionEnd
textColor
:
colorDialog.color
Component.onCompleted
:
document.fileUrl =
"qrc:/example.html"
onFontSizeChanged
: {
fontSizeSpinBox.
valueGuard =
false
fontSizeSpinBox.
value =
document
.
fontSize
fontSizeSpinBox.
valueGuard =
true
}
onFontFamilyChanged
: {
var index =
Qt.fontFamilies
(
).indexOf
(
document
.
fontFamily)
if (
index ==
-
1
) {
fontFamilyComboBox.
currentIndex =
0
fontFamilyComboBox.
special =
true
}
else {
fontFamilyComboBox.
currentIndex =
index
fontFamilyComboBox.
special =
false
}
}
onError
: {
errorDialog.
text
=
message
errorDialog.
visible =
true
}
}
}