QML TextField输入的文本传输到C++

前言:实验室的项目需要在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存放的就是输入的文本

(我是一个转行过来的小菜鸡,渴望学习掌握更多的技术,这是我的第一篇个人随笔吧算是,希望有一个好的开始。)

上一篇:内部类的使用


下一篇:第020例-一个简单的登录页-(学习Flutter第7天)