从 Qt 5.2.1 C++更改 QML 文本框中的文本
change text in QML textbox from C++ Qt 5.2.1
我对QML有点陌生,一般C++,但我学得很快。不过我有点难倒了。我正在尝试创建一个从 QML 文本输入文本字段读取文本并将数据写入文本区域的应用程序。我不确定出了什么问题,但是在阅读文本时,我收到错误"无法将QQuickTextInput分配给QString" - 我对如何写回文本区域有点困惑。如果有人能提供一些启示,那将不胜感激。我已经浏览了 QML/C++ 绑定页面,这似乎没有帮助。我想知道该页面是否是为旧版本的Qt编写的...这是我到目前为止的代码:
QML:
import QtQuick 2.0
import QtMultimedia 5.0
import QtQuick.Controls 1.1
import QtQuick.Window 2.1
import QtWinExtras 1.0
import QtQuick.Layouts 1.1
Rectangle {
id: main
width: 640
height: 480
signal onClicked_button
TextInput {
id: textbocks
objectName: textbocks
x: 280
y: 230
width: 80
height: 20
text: "Text Input"
font.pixelSize: 12
Button {
id: button1
x: -10
y: 45
text: "Button"
onClicked:main.onClicked_button()
}
}
TextField {
id: textField1
x: 257
y: 329
placeholderText: qsTr("Text Field")
}
}
标头(类 - 最初设计用于写回文本输入):
#ifndef TEST_H
#define TEST_H
#include <QObject>
#include <QtCore>
#include <QString>
#include <QQuickView>
#include <QQuickItem>
#include <QQmlComponent> // for accessing QML from C++
#include <QQmlContext> // for accessing C++ from QML
class test : public QObject
{
Q_OBJECT
public:
explicit test(QObject *parent = 0);
signals:
public slots:
void test_button(){
QQuickView *view = new QQuickView(QUrl("test.qml"));
view->show();
QQuickItem *item = view->rootObject();
QObject *item = object->findChild<QObject*>("textbocks");
textbox->setProperty("text", str);
delete textbox;
return;}
private:
bool switched;
bool textOutput;
QString str = "Hello World";
};
#endif // TEST_H
和主.cpp文件:
#include "test.h"
#include <QGuiApplication>
#include <QtCore>
#include <QObject>
#include <QQuickItem>
#include <QQmlComponent>
#include <QQmlContext>
#include <QQuickView>
#include <QDeclarativeEngine>
#include <QDeclarativeComponent>
#include <QDeclarativeContext>
test::test(QObject *parent) :
QObject(parent)
{
}
int main (int argc, char*argv[]) {
QGuiApplication app(argc, argv);
QQuickView *view = new QQuickView(QUrl("test.qml"));
view->show();
QQuickItem *item = view->rootObject();
test *funcs = new test();
// connect button signals to their slots:
QObject::connect(item, SIGNAL(buttonClicked_button()), funcs, SLOT(test_button()));
delete funcs;
return 0;
}
任何帮助将不胜感激。其中一些对我来说仍然有点抽象......谢谢!!
因为我注意到您正在从同一个QML文件"test.qml"创建两个QQuickViews:
1.In 主要功能(主要.cpp)
2.在TEST_BUTTON功能(测试.h)
这是不同的 QObject .另一个问题是:
-
您正在将文本输入类型的对象分配给对象名称属性 (test.qml),该属性是一个字符串
-
您正在删除(如Yekmen之前提到的)对象(文本框(test.h)= textbocks(test.qml)),同时您通过setProperty()函数为其分配字符串str="hello world"。啊,忘记了一个,C++侧的插槽名称必须与QML中声明的插槽名称相同
我认为你应该看看这个方法:
Connections {
target: area
onClicked: foo(parameters)
}
例如:area是你的c++对象。( qmlRegisterType(myclass) )区域发送信号,然后你可以启动你的功能。我认为更容易。
相关文章:
- 如何从C++代码中检索 QML 的文本字段中的文本?
- 如何将 qml 的文本转换为 float 和 int
- 在 qml 中多行时省略文本
- 从 QML 更好地控制文本光标
- 如何从另一个QML文件更改标签文本
- 如何在 QML 中显示来自 QTextDocument 的分页文本?
- Qt Quick 2 Qml:将文本准确地放在圆圈的中心
- 从C++更新 QML 文本
- 如何替换QT QML中的变体数组文本
- 从 Qt 5.2.1 C++更改 QML 文本框中的文本
- 如何使用从C++生成的关键事件更改 QML 文本字段文本属性
- 如何在Qt QML中以声明性方式更改文本的颜色
- 如何使用Blackberry 10中的Cascades中的Qt/qml/C++将一个qml文件中的标签文本从另一个qml
- 如何从C++修改QML文本
- 如何从TextInput在一个特殊的容器文本[诺基亚Qt Qml]
- Qt QML 如何格式化(突出显示)文本
- 如何用Qt中的QSyntaxHighlighter类在QML TextEdit上实现富文本逻辑
- QML文本元素上的dataChanged
- QML-如何在ListView上显示文本文件
- QML/D文本编辑器和基本注意事项