[Development] [Feature Suggestion] Improved Text layouting support in QtQuick

Roiner Winkler syncu at bk.ru
Fri Jul 17 12:41:08 CEST 2020


Hello,
 
having used QtQuick professionally for serveral years now, I have some suggestions regarding the text handling in Qt Quick.
One major point of interest for me is rich text handling. A large number of modern (mostly HTML/Electron-based) applications nowadays feature smart text input fields which are able to automatically highlight or link certain parts of the text and show buttons, tags, emojis or similar controls inlined in the text. These kinds of controls get more and more important in UI development.
 
As of yet, QtQuick lacks such a feature. Anything going beyond very basic hyperlink/image support requires developers to resort to the RichText mode which however only allows you to use a subset of HTML rather than your own QtQuick Controls which has a bad performance impact and requires more development effort.
 
I would like propose a new layout control in QML for positioning an arbitrary composition of text and other QtQuick elements. It should support user selection and user editing (similar to contenteditable=true in HTML) and let the QML elements inside the text react to them being selected.
The syntax I have in mind could look like this:
 
TextLayout {
    alignment: Qt.AlignLeft
    editable: true
    selectionAllowed: true
 
    TextSpan {
        text: "Lorem ipsum dolor sit amet"
    }
    Button {
        label: "Click me"
        TextLayout.alignment: TextLayout.Center
        background: TextLayout.isSelected ? "blue" : "white"
    }
    TextSpan {
        text: "Text after the button"        
        TextLayout.allowSelection: false
    }
    TextSpan {
        lineBreakBefore: true
        color: "red"
        text: "more text"
    }
}
 
This is inspired by the TextSpan and WidgetSpan controls in Flutter:
https://api.flutter.dev/flutter/widgets/WidgetSpan-class.html
https://api.flutter.dev/flutter/painting/TextSpan-class.html
 
The second proposal I would like to make affects custom QtQuick controls developed in C++. As of now, it is practically impossible to implement custom scene graph controls (not QQuickPaintedItems) containing text without using the private QQuickTextNode. This node should be made public, or different APIs for painting text via the scene graph should be exposed.
 
Are there already plans to include such features for Qt6 in the near future?
 
Best regards,
 
Steven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20200717/7edead5a/attachment.html>


More information about the Development mailing list