前言:实验室的项目需要在C++中读取在QML中密码输入框输入的文本,QML密码输入框用的是TextField组件。本人技术不精,折腾了很久才找到这种方法。下面给出的代码只是相关的关键代码,整体代码就没放了。大家可以模仿着插入自己代码中。
方法总结:注册一个中间类TransObj用于数据的传输
1、TextField文本输入框
TextField { id: inputpassword width: 250 height: 40 font.bold: true font.pointSize: 14 placeholderText: qsTr("Enter password") anchors.centerIn: parent style:TextFieldStyle { textColor: "black" background: Rectangle { radius: 2 implicitWidth: 150 implicitHeight: 40 color: "white" } } }
2、在C++头文件中定义一个开放给QML调用的函数Q_INVOKABLE void getFromQml(Qstring text);
#include <QObject> class USB_plug : public QObject { Q_OBJECT public: Q_INVOKABLE void getFromQml(QString text) { password = text; qDebug() << password << "#############" << text; }
3、在main.cpp
声明一下(已经链接到qml)
#include "usb_plug.h" int main(int argc, char *argv[]) { //省略其他代码,关键代码如下: qmlRegisterType<USB_plug>("an.qml.TransObj", 1, 0, "TransObj"); return app.exec(); }
2、QML中 import an.qml.TransObj 1.0
,并且定义TransObj{id: transobj}
得到变量TransObj
import an.qml.TransObj 1.0 TransObj{ id: transobj }
3、通过TransObj变量直接调用getFromQml()得到文本传入C++
MouseArea { //省略其余代码 onClicked: { transobj.getFromQml(inputpassword.text) } }
以上就能完成将TextField输入的文本传输到C++中,password存放的就是输入的文本
(我是一个转行过来的小菜鸡,渴望学习掌握更多的技术,这是我的第一篇个人随笔吧算是,希望有一个好的开始。)