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

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.