Qt Quick Text Editor - Connecting Actions
Earlier in the Qt Quick Text Editor Guide, we created a main.qml file containing the description of our user interface in QML. The user interface contains tool buttons in a tool bar on top of a text area. Afterwards, we created a DocumentHandler class in C++ that will handle the file loading and saving.
Now we shall use the DocumentHandler in the QML file through actions. There is an Action QML type that we can connect to the tool buttons which in turn calls the DocumentHandler functions.
Importing the DocumentHandler QML Type
With the qmlRegisterType()
function, we declared that the DocumentHandler QML type is imported from the org.qtproject.example
library.
The following code is taken from the main.cpp file from the previous stage.
qmlRegisterType<DocumentHandler>("org.qtproject.example", 1, 0, "DocumentHandler");
In the main.qml file, enter the following import statement:
import org.qtproject.example 1.0
The DocumentHandler type is then available and we can create an object directly by adding it at the bottom of the application window.
DocumentHandler { id: document }
Assigning Actions
As mentioned, the tool buttons are associated with an action, for example, the cut button is associated with the cut action. The cut action embodies the events that define the action, for example, the calling of the appropriate function in the text area.
For our application, we have six actions, which may be placed inside the application window.
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: "qrc:images/editpaste.png" iconName: "edit-paste" onTriggered: textarea.paste() } Action { id: fileopenaction iconSource: "images/fileopen.png" iconName: "document-open" text: "Open" onTriggered: fileDialog.open() }
These actions call the appropriate function and assign a specific icon and name to the action. To connect the cutaction
to the cut tool button, add the following to the tool button
ToolButton { id: cut_toolbutton iconSource: "images/editcut.png" iconName: "cut_icon" anchors.left: save_toolbutton.right action: cutaction; }
For the open and save actions, we require that the user choose an existing file or create a new file. To do this, we can pop up a file dialog and ask the user to select the file to open from or save onto. We can create two file dialogs, one for opening a file and one for saving the file, each setting their own titles.
FileDialog { id: fileOpenDialog title: "Please choose a file to open" nameFilters: ["Text files (*.txt)"] onAccepted: document.fileUrl = fileUrl } FileDialog { id: fileSaveDialog title: "Please enter the file to save" nameFilters: ["Text files (*.txt)"] selectExisting: false onAccepted: document.saveFile(fileUrl) }
Setting the FileDialog's selectExisting
property to false
allows us to save new files.
The FileDialog type is from the Qt Quick Dialogs and is imported with
import QtQuick.Dialogs 1.2
Deploying TextEditor
Deploying the TextEditor depends on the platform on which the application is run. The process is simple and Qt provides several tools for packaging applications for a given platform. The Deploying Qt Applications page lists the instructions for the supported platforms. For this guide, we will deploy on Windows desktop platform with the windeploytool
to create a directory with the required dependent libraries.
To package TextEditor,
- Copy the texteditor.exe file from the release directory to another directory which serves as the destination folder.
- Run the windeployqt.exe file which resolves and copies the Qt libraries into the destination folder. windeployqt.exe is found in the bin directory of the installation.
C:\Qt\5.3\msvc2012_opengl\bin>windeployqt.exe <path to destination folder>
The destination folder can now be packaged and the binary file is executable. The images and QML file are already packaged into the binary file.
Example Files
The accompanying examples files are found in the following page:
© 2019 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.