如何使用 QML 前端和 C++ 后端显示 QTextEdit(QWidget)中的文本?我目前正在使用 qmake 项目开发 Ubuntu Phone 应用程序。我需要 QML TextEdit 无法提供的高级文本编辑功能。我想使用 QTextEdit,但无法让它显示任何文本。
将来我会将文本传递到 QTextEdit 对象中,以特殊的格式显示文本。
在这个例子中,应该显示“Hello World”。
任何帮助将不胜感激!
这是我当前的代码:
主文件
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++)
}
}
}
我的编辑器
#ifndef MYEDITOR
#define MYEDITOR
#include <QtGui>
#include <QTextEdit>
class MyEditor : public QTextEdit
{
Q_OBJECT
public:
explicit MyEditor(QWidget *parent = 0);
~MyEditor();
};
#endif // MYEDITOR
我的编辑器
#include "myeditor.h"
MyEditor::MyEditor(QWidget *parent) :
QTextEdit(parent)
{
this->setHtml("<h1>Hello World</h1>");
}
MyEditor::~MyEditor() {
}
后端.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);
}
最后,我在 pro 文件的以下行中添加了“widgets”:
QT += qml quick widgets
答案1
哦,它实际上来自 Qt Widgets。Qt Widgets 不能轻易粘贴到 QML 用户界面中。
StackOverflow 上还有一些类似的问题:在 qml 中嵌入 qwidget 对象