将参数从qml传递到c++; < >我不知道如何在Qt.中从QML文件传递参数到C++文件。
QML代码:将参数从qml传递到c++; < >我不知道如何在Qt.中从QML文件传递参数到C++文件。,qt,qml,Qt,Qml,QML代码: import QtQuick 1.1 Rectangle{ id:loin height: 272 width:480 property alias loguid:loginuid signal sigHome() Rectangle{ id:rect1 width:parent.width-80 height:24 TextInput { id
import QtQuick 1.1
Rectangle{
id:loin
height: 272
width:480
property alias loguid:loginuid
signal sigHome()
Rectangle{
id:rect1
width:parent.width-80
height:24
TextInput {
id:loginuid
maximumLength: 16
width: maximumLength * 20
focus: false
validator: RegExpValidator { regExp: /\d+/ }
KeyNavigation.down: login1
}
}
Button{
id: login1
x: 195
y: 187
height:30;
focus:false
border.color:"black"
opacity: activeFocus ? 1.0 : 0.5
Text{
text:"LOGIN"
anchors.horizontalCenter:login1.horizontalCenter;
anchors.verticalCenter:login1.verticalCenter;
}
Keys.onReturnPressed: {
if(loginuid.text < 1000000000000000)
{
text1.opacity=0.1
error1.visible=true
errorText.text="\n enter valid 16 digit number\n"
errorOk.focus=true
loginuid.focus=false
}
else{
loginuid.focus=false
loin.sigHome()
}
}
}
}
导入QtQuick 1.1
长方形{
id:腰肉
身高:272
宽度:480
属性别名loguid:loginuid
信号信号
长方形{
id:rect1
宽度:parent.width-80
身高:24
文本输入{
id:loginuid
最大长度:16
宽度:最大长度*20
焦点:错误
验证程序:RegExpValidator{regExp:/\d+/}
KeyNavigation.down:login1
}
}
钮扣{
id:login1
x:195
y:187
身高:30;
焦点:错误
边框。颜色:“黑色”
不透明度:activeFocus?1.0:0.5
正文{
文本:“登录”
anchors.horizontalCenter:login1.horizontalCenter;
anchors.verticalCenter:login1.verticalCenter;
}
按键。按返回键:{
如果(loginuid.text<10000000000000)
{
text1.不透明度=0.1
error1.visible=true
errorText.text=“\n输入有效的16位数字\n”
errorOk.focus=true
loginuid.focus=false
}
否则{
loginuid.focus=false
腰肉
}
}
}
}
c++代码:
#include <QApplication>
#include <QDeclarativeView>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
int uid;
QDeclarativeView view;
view.setSource(QUrl::fromLocalFile("main.qml"));
view.show();
return app.exec();
}
#包括
#包括
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
int-uid;
QDEcrativeView视图;
view.setSource(QUrl::fromLocalFile(“main.qml”);
view.show();
返回app.exec();
}
当我按下login按钮rect1.text content时,转到main.cpp文件,并在main.cpp get dat值中输入uid。类似这样的内容uid=rect1.text
如何做到? < P>我不会试图从C++侧听到QML信号。调用带有参数的C++方法更容易,并且实现相同: 为此,您必须:
- 定义接受所需参数的方法
- 带有声明引擎的方法的类
- 然后,您可以将该类的实例作为您的属性,并最终从QML调用该方法
这一主题在本手册中也有详细介绍。谢谢你,塞巴斯戈,你的回答帮助了我。我使用信号和插槽进行通信。 我在main.qml中创建了一个信号
signal info(string msg)
和在登录页面
else{
info(loginUid.text)
loginuid.focus=false
loin.sigHome()
}
在main.cpp中,我将其连接到d插槽
main.cpp是这样的
#include <QtGui>
#include <QApplication>
#include <QDeclarativeView>
#include <QtDeclarative>
class DeclarativeView : public QDeclarativeView
{
Q_OBJECT
public:
DeclarativeView(const QUrl & source) : QDeclarativeView(source)
{
}
public slots:
void readText(QString quid)
{
qdebug<<quid;
}
};
#include "main.moc"
int main(int argc, char *argv[])
{
QString file = "main.qml";
QApplication app(argc, argv);
DeclarativeView view(QUrl::fromLocalFile(file));
QDeclarativeItem *item = qobject_cast<QDeclarativeItem *>(view.rootObject());
QObject::connect(item, SIGNAL(info(QString)), &view, SLOT(readText(QString)));
view.show();
return app.exec();
}
#包括
#包括
#包括
#包括
类DeclarativeView:PublicQDeclarativeView
{
Q_对象
公众:
DeclarativeView(const-QUrl&source):QDeclarativeView(source)
{
}
公众时段:
无效读文本(QString quid)
{
QueDug < P>创建GUI控制器C++类:
class UiController : public QObject
{
Q_OBJECT
public:
UiController();
virtual ~UiController();
public slots:
void cal_daysoff__onDoubleClicked(const QDate& date);
};
例如,在QML文件中,您定义了一个日历控件,在该控件中,您将信号连接到控制器中的插槽:
Calendar{
id: cal_daysoff
Layout.fillWidth: true
Layout.fillHeight: true
onDoubleClicked: UiController.cal_daysoff__onDoubleClicked(date)
}
#include "uicontroller.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
UiController control;
engine.rootContext()->setContextProperty("UiController", &control);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
在主文件中,启动QML接口时,将接口连接到控制器:
Calendar{
id: cal_daysoff
Layout.fillWidth: true
Layout.fillHeight: true
onDoubleClicked: UiController.cal_daysoff__onDoubleClicked(date)
}
#include "uicontroller.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
UiController control;
engine.rootContext()->setContextProperty("UiController", &control);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}