前言:实验室的项目需要在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存放的就是输入的文本
(我是一个转行过来的小菜鸡,渴望学习掌握更多的技术,这是我的第一篇个人随笔吧算是,希望有一个好的开始。)