Comment afficher un QWidget dans Ubuntu Touch en utilisant QML et C ++?

0

Comment puis-je afficher du texte de QTextEdit (un QWidget) à l'aide d'une interface QML et d'un programme C ++? Je développe actuellement une application pour téléphone Ubuntu à l'aide du projet qmake. J'ai besoin de fonctionnalités d'édition de texte avancées que QML TextEdit ne peut pas offrir. Je souhaite utiliser QTextEdit, mais je ne parviens pas à afficher de texte.

À l'avenir, je vais transmettre du texte à l'objet QTextEdit pour l'afficher dans un format spécial.

Dans cet exemple, "Hello World" devrait être affiché.

Toute aide serait grandement appréciée!

Capture d'écran: QTextEdit

Voici mon code actuel:

main.qml

import QtQuick 2.0
import Ubuntu.Components 1.1
import TextEdit 1.0
/*!
    \brief MainView with a Label and Button elements.
*/

MainView {
    // objectName for functional testing purposes (autopilot-qt5)
    objectName: "mainView"

    // Note! applicationName needs to match the "name" field of the click manifest
    applicationName: "textedit.username"

    /*
     This property enables the application to change orientation
     when the device is rotated. The default is false.
    */
    //automaticOrientation: true

    // Removes the old toolbar and enables new features of the new header.
    useDeprecatedToolbar: false

    width: units.gu(100)
    height: units.gu(75)

    Page {
        title: i18n.tr("textEdit")
        MyEditor {
            // should display Hello World by default (defined in C++)
        }
    }
}

myeditor.h

#ifndef MYEDITOR
#define MYEDITOR

#include <QtGui>
#include <QTextEdit>


class MyEditor : public QTextEdit
{
    Q_OBJECT

public:
    explicit MyEditor(QWidget *parent = 0);
    ~MyEditor();


};

#endif // MYEDITOR

myeditor.cpp

#include "myeditor.h"

MyEditor::MyEditor(QWidget *parent) :
    QTextEdit(parent)
{
    this->setHtml("<h1>Hello World</h1>");
}

MyEditor::~MyEditor() {

}

backend.cpp

#include <QtQml>
#include <QtQml/QQmlContext>
#include "backend.h"
#include "mytype.h"
#include "myeditor.h"


void BackendPlugin::registerTypes(const char *uri)
{
    Q_ASSERT(uri == QLatin1String("TextEdit"));

    qmlRegisterType<MyType>(uri, 1, 0, "MyType");
    qmlRegisterType<MyEditor>(uri, 1, 0, "MyEditor");
}

void BackendPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
{
    QQmlExtensionPlugin::initializeEngine(engine, uri);
}

Enfin, j'ai ajouté "widgets" à la ligne suivante, le fichier pro:

QT += qml quick widgets
utilisateur2544014
la source
Je ne sais pas si cela devrait fonctionner si tôt dans le constructeur ...
Velkan
Je peux définir la propriété "html" dans qml et elle a toujours le même résultat.
user2544014

Réponses:

1

Oh, cela provient en fait du Qt Widgets. Les widgets Qt ne peuvent pas être facilement collés dans l'interface utilisateur QML.

Il y avait des questions similaires sur StackOverflow: qt5-embed-qwidget-object-in-qml

Velkan
la source
J'ai lu le lien Stack Overflow que vous avez fourni. Est-il possible d'incorporer le fichier QWidget :: createWindowContainer? J'ai essayé cette méthode ( lien ) et cela a créé une deuxième fenêtre.
user2544014